Btrfs でのファイルシステムレイアウト
sudo btrfs subvolume create /@home とすると親が 5 のサブボリュームが生成される table:subvolume
サブボリューム マウントポイント
/ (id=5) /
@home /home
@snapshots /snapshots
この構成で作ると @ のスナップショットを取る時、/home も含まれてしまう気がする 移行手順ログ
sudo rsync -av --links /home /@home
sudo mount /dev/mapper/vg0-root -o subvol=/@home /home
/etc/fstab に UUID=6e62ce5d-407e-4265-abba-c4bf30ee8d06 /home btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/@home 0 0 を追加したけど、 /home にマウントできなくてエラー
[FAILED] Failed to mount /home.
[DEPEND] Dependency failed for Local File Systems.
fstab を編集後、 sudo mount -a で読み込み直すと mount: /home: wrong fs type, bad option, bad superblock on /dev/mapper/vg0-root, missing codepage or helper program, or other error. code:terminal
8.108072 BTRFS: device fsid 6e62ce5d-407e-4265-abba-c4bf30ee8d06 devid 1 transid 22820 /dev/dm-2 scanned by (udev-worker) (348) 8.213737 BTRFS info (device dm-2): using crc32c (crc32c-intel) checksum algorithm 8.213745 BTRFS info (device dm-2): disk space caching is enabled 8.232825 BTRFS info (device dm-2): enabling ssd optimizations 9.414958 BTRFS info: devid 1 device path /dev/mapper/vg0-root changed to /dev/dm-2 scanned by (udev-worker) (470) 9.415732 BTRFS info: devid 1 device path /dev/dm-2 changed to /dev/mapper/vg0-root scanned by (udev-worker) (470) 分かった! fstab に書いている UUID=6e62ce5d-407e-4265-abba-c4bf30ee8d06 /home btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/@home 0 0 の subvolid=5 が間違っていて subvolid=380 とするのが正しい (sudo btrfs subvolume list -p / で ID を確認) sudo btrfs filesystem defragment -c -v /@home
btrfs send /root_backup | btrfs receive /@
mv /@/root_backup /@ これは /@/root_backup が一つのサブボリュームになっているからできない btrfs subvolume snapshot -r / @ の後、 btrfs send @ | btrfs receive / を実行
違う
mv /@/root_backup /@ が失敗するのはディレクトリ名が衝突しているだけな気がする
mv: '/@/root_backup' and '/@/root_backup are the same file
↑ これはそもそも mv の動作として間違ってるか mv /@/root_backup /@2 は mv: cannot move '/@/root_backup/' to '/@2': Read-only file system
移行後のシステム
code:terminal
$ sudo btrfs subvolume list /
ID 380 gen 23830 top level 5 path @home
ID 484 gen 23823 top level 5 path @snapshots
ID 626 gen 23822 top level 484 path @snapshots/backup
code:terminal
$ findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mapper/vg0-root
btrfs rw,rela
├─/proc proc proc rw,nosu
│ └─/proc/sys/fs/binfmt_misc
│ systemd-1 autofs rw,rela
│ └─/proc/sys/fs/binfmt_misc
│ binfmt_misc binfmt rw,nosu
├─/sys sys sysfs rw,nosu
│ ├─/sys/firmware/efi/efivars
│ │ efivarfs efivar rw,nosu
│ ├─/sys/kernel/security securityfs securi rw,nosu
│ ├─/sys/fs/cgroup cgroup2 cgroup rw,nosu
│ ├─/sys/fs/pstore pstore pstore rw,nosu
│ ├─/sys/fs/bpf bpf bpf rw,nosu
│ ├─/sys/kernel/debug debugfs debugf rw,nosu
│ ├─/sys/kernel/tracing tracefs tracef rw,nosu
│ ├─/sys/fs/fuse/connections
│ │ fusectl fusect rw,nosu
│ └─/sys/kernel/config configfs config rw,nosu
├─/dev dev devtmp rw,nosu
│ ├─/dev/shm tmpfs tmpfs rw,nosu
│ ├─/dev/pts devpts devpts rw,nosu
│ ├─/dev/hugepages hugetlbfs hugetl rw,rela
│ └─/dev/mqueue mqueue mqueue rw,nosu
├─/run run tmpfs rw,nosu
│ ├─/run/credentials/systemd-tmpfiles-setup-dev.service
│ │ ramfs ramfs ro,nosu
│ ├─/run/credentials/systemd-sysctl.service
│ │ ramfs ramfs ro,nosu
│ ├─/run/user/1000 tmpfs tmpfs rw,nosu
│ │ └─/run/user/1000/doc portal fuse.p rw,nosu
│ └─/run/credentials/systemd-tmpfiles-setup.service
│ ramfs ramfs ro,nosu
├─/tmp tmpfs tmpfs rw,nosu
├─/home /dev/mapper/vg0-root/@home │ btrfs rw,rela
│ btrfs rw,rela
└─/boot /dev/nvme0n1p1
vfat rw,rela
この状態で sudo btrfs subvolume snapshot -r / /snapshots/backup_2023_05_21 のようにしてスナップショットを取ると、 @home, @snapshots などのサブボリュームとマウントポイントの中身は除外された状態で得られる /proc, /sys, /dev, /run, /tmp, /home, /snapshots, /boot は空の状態でスナップショットが取られる