Làm cách nào để sử dụng chính xác OverlayFS để bảo vệ hệ thống tập tin gốc của tôi?
Tôi có một hệ thống nhúng khởi động và chạy từ thẻ SD. Vì nó sẽ bị mất điện đột ngột, tôi muốn bảo vệ hệ thống tập tin gốc. OverlayFS có vẻ như là giải pháp đơn giản nhất, nhưng các ví dụ tôi thấy thường không liên quan đến hệ thống tệp gốc và / hoặc sử dụng một tmpfs không tốt cho tôi vì tôi có rất ít bộ nhớ.
Tôi đang sử dụng Linux Kernel 4.4.0 CONFIG_OVERLAY_FS=y
được kích hoạt. Hệ thống tập tin của tôi là xenial-base-armhf.tar.gz
và tôi đã làm apt install -y overlayroot
.
Thẻ SD của tôi trông như:
# 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
Trước khi tạo OverlayFS, mọi thứ được gắn kết là:
# 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)
Kế hoạch của tôi là sử dụng /dev/mmcblk1p5
như hệ thống tập tin lớp phủ được gắn tại /overlay
.
# tree /overlay
/overlay
├── lost+found
├── root-fs
└── work
Hoặc là tôi đang làm sai, hoặc tôi có một số vấn đề về cấu hình, bởi vì:
# 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)
Có vẻ như nó đã hoạt động, nhưng nếu tôi tạo một tệp như:
# touch /root/test_file_write
Sau đó, tắt nguồn và nhìn vào thẻ SD trong máy tính để bàn của tôi, tôi thấy /dev/mmcblk1p3/root/test_file_write
không như tôi mong đợi /dev/mmcblk1p5/root-fs/root/test_file_write
.
Có nên làm việc này?
touch /root/test_file_write
trả về touch: cannot touch '/root/test_file_write': Read-only file system
, rõ ràng lớp phủ không hoạt động ... nhưng tại sao?
mkdir /tmp/{root,overlay,work}; touch /tmp/root/lowerfile; mount -t overlay overlay -o lowerdir=/tmp/root,upperdir=/tmp/overlay,workdir=/tmp/work /tmp/root/; touch /tmp/root/upperfile; umount /tmp/root
/tmp/overlay/upperfile
và /tmp/overlay/root/lowerfile
.
mount -o remount,ro /
trả vềmount: / is busy
và cố gắng khởi động hệ thống với nó chỉ đọc được rất nhiều lỗi. Tôi chưa thành công nhưng tôi sẽ tiếp tục cố gắng.