web-dev-qa-db-fra.com

Comment utiliser des superpositions pour protéger le système de fichiers racine?

Comment utiliser correctement des superpositions pour protéger mon système de fichiers racines?

J'ai un système intégré qui botte et passe d'une carte SD. Étant donné que cela subira une perte de puissance soudaine, je souhaite protéger le système de fichiers racine. superpositions Semblant que la solution la plus facile, mais les exemples que je trouve n'impliquent généralement pas le système de fichiers racine et/ou utilisez un TMPFS qui n'est pas bon pour moi depuis que j'ai très peu de mémoire.

J'utilise Kernel Linux 4.4.0 avec CONFIG_OVERLAY_FS=y activée. Mon système de fichiers est xenial-base-armhf.tar.gz et j'ai fait apt install -y overlayroot.

Ma carte SD ressemble à:

# fdisk -l /dev/mmcblk1
Disk /dev/mmcblk1: 29 GiB, 31104958464 bytes, 60751872 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7f56a0ab

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk1p1 *        2048  1050623  1048576  512M  c W95 FAT32 (LBA)
/dev/mmcblk1p2       1050624  1052671     2048    1M da Non-FS data
/dev/mmcblk1p3       1052672  7344127  6291456    3G 83 Linux
/dev/mmcblk1p4       7344128 60751871 53407744 25.5G  5 Extended
/dev/mmcblk1p5       7346176 13637631  6291456    3G 83 Linux
/dev/mmcblk1p6      13639680 60751871 47112192 22.5G 83 Linux

Avant de créer les superpositions, tout est monté comme suit:

# mount
/dev/mmcblk1p3 on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=170440k,nr_inodes=42610,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-    cgroups-agent,name=systemd)
configfs on /sys/kernel/config type configfs (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=35752k,mode=700)
/dev/mmcblk1p6 on /opt type ext4 (rw,noatime,data=ordered)
/dev/mmcblk1p5 on /overlay type ext4 (rw,noatime,data=ordered)

Mon plan était d'utiliser /dev/mmcblk1p5 Comme le système de fichiers superposé monté à /overlay.

# tree /overlay
/overlay
├── lost+found
├── root-fs
└── work

Soit je fais des choses mal ou j'ai un problème de configuration, car:

# mount -t overlay overlay -o lowerdir=/,upperdir=/overlay/root-fs,workdir=/overlay/work /
# mount
/dev/mmcblk1p3 on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=170440k,nr_inodes=42610,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
configfs on /sys/kernel/config type configfs (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=35752k,mode=700)
/dev/mmcblk1p6 on /opt type ext4 (rw,noatime,data=ordered)
/dev/mmcblk1p5 on /overlay type ext4 (rw,noatime,data=ordered)
overlay on / type overlay (rw,relatime,lowerdir=/,upperdir=/overlay/root-fs,workdir=/overlay/work)

On dirait que cela a fonctionné, mais si je crée un fichier comme:

# touch /root/test_file_write

Ensuite, Poweroff et regardez la carte SD dans mon bureau, je vois /dev/mmcblk1p3/root/test_file_write pas ce que j'avais attendu /dev/mmcblk1p5/root-fs/root/test_file_write.

Devrait-il fonctionner?

8
proximous

Une solution pourrait être d'utiliser un initramfs pour monter le rootfs avec des superpositions.

Vous pouvez avoir un look comment cela se fait sur le PI de framboise

ou, sinon à l'aide d'un fichier ARM Device, à le package overlayroot ubunt

5
Mathieu Maret