Btrfs failisüsteemi kasutamine Debianiga
Sissejuhatus
TODO https://btrfs.wiki.kernel.org/index.php/Main_Page
Tööpõhimõte
Tundub, et 2021 aasta alguses on btrfs failisüsteem üldiselt kasutatav, nt
- proxmox puhul on olemas btrfs roadmap peal
- opensuse ja fedora kasutavad btrfs vaikimisi juurifailisüsteemina
- debiani tavalne installer võimaldab tekitada root-on-btrfs süsteemi
- raid0 ja raid1 paistavad töötavat kenasti, väidetavalt raid5/6 on probleemsed
- synology üks storage seadisusjuht on btrfs põhine
btrfs on iseloomulikud
- tavaline open source tarkvara (nt erinevalt zfs)
- väidetavalt võtab vähem mälu ressurssi kui zfs
- suhteliselt lihne kasutada (kontseptuaalselt, paigaldamise mõttes, käsundamise mõttes, seadistamise mõttes)
- üks väga väheseid failisüsteeme, mille suurust on võimalik online vähendada (iseasi kuidas see vähendamine nö suures pildis toimub, nt plokkseadmete asendamise teel)
- pakkimine
- väidetavalt sisaldab igasuguseid kaasaegseid kavalusi (kontrollsummad, copy-on-write)
- snapshot kasutamine
- ressurssi liigendamine subvolume abil
- võimaldab määratleda, kas redundantne on metadata ja data mõlemad, või neist üks, või mitte kumbki
- on mõtet kasutada ka ühe füüsilise kettaga snapshot, pakkimise jms omaduste tõttu (kuigi pole redundantsuse võimalust)
- sisaldab dedup tuge
- ei sisada ise krüptimist (saab kasutada nt luks abi)
- grub2 toetab
- saab kasutada uefi arvutiga
Kõige loomulikum on kasutada süsteemi ainsa storage haldusvahendina (st nt mitte koos lvm'iga).
Väited
- snapshot on erilist tüüpi subvolume (snapshot tekitada cow abil mitte tühjana, aga oma origin sisuga)
- snapshot jääb alles tavalise ressursina peale tema parent kustutamist
- btrfs haldus toimub mkfs.btrfs, mount ja btrfs nimelise utiliidiga; lisaks nimetatakse subvolumeid ja snapshotte umber tavalise mv utiliidiga
- pakkimine on mount suvand
- btrfs kraami seadistused (sh kontreetsete ressursside kohta) asuvad plokkseademete endi peal ja aruti mälus, st mitte /etc, /var/cache vms kohtades; v.a. /etc/fstab
- btrfs-only arvutis saab dual-bootida operatsioonisüsteeme, mis on ka ise btrfs võimelised (nt enamus linux distributsioone, aga tõenäoliselt mitte bsd tarkvara ja kindlasti mitte windows tarkvara)
root-on-btrfs süsteem
root-on-btrfs paistab debian v. 11 puhul selliselt, kusjuures klassikalised utiliidid (nt df) esitavad infot nö klassikaliselt ehk mitte btrfs omadusi esitades
root@deb11-btrfs:/mnt# fdisk /dev/vda -l Disk /dev/vda: 16 GiB, 17179869184 bytes, 33554432 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: gpt Disk identifier: 8F8D1C98-E842-43FD-AACF-5451B1FBCB5B Device Start End Sectors Size Type /dev/vda1 2048 1953791 1951744 953M EFI System /dev/vda2 1953792 5859327 3905536 1.9G Linux swap /dev/vda3 5859328 33552383 27693056 13.2G Linux filesystem
ja
root@deb11-btrfs:/mnt# df -h / /boot/efi Filesystem Size Used Avail Use% Mounted on /dev/vda3 14G 1.2G 12G 9% / /dev/vda1 952M 5.3M 946M 1% /boot/efi
ja
root@deb11-btrfs:/mnt# cat /proc/cmdline BOOT_IMAGE=/@rootfs/boot/vmlinuz-5.10.0-3-amd64 root=UUID=f45d7103-b17b-49b6-b2ec-a3128973ce51 ro rootflags=subvol=@rootfs
ja
root@deb11-btrfs:/mnt# findmnt / TARGET SOURCE FSTYPE OPTIONS / /dev/vda3[/@roofs] btrfs rw,relatime,space_cache,subvolid=256,subvol=/@rootfs
kus juurfailisüsteem ei asu mitte otse btrfs nö seadmel, aga '@rootfs' nimelisel subvolume'il. See asjaolu teeb snapshot abil dual bootimise mugavaks.
Tarkvara paigaldamine
btrfs failisüsteemi haldusutiliitide paigaldamiseks sobib öelda
# apt install btrfs-tools
Failisüsteemi tekib
- TODO
Kasutamine
Btrfs failisüsteemi tekitamiseks sobib tekitada esmalt lvm köide
# lvcreate -L20G -n btrfs system
ning seejärel öelda
# mkfs.btrfs -m single /dev/system/btrfs btrfs-progs v4.7.3 See http://btrfs.wiki.kernel.org for more information. Performing full device TRIM (20.00GiB) ... Label: (null) UUID: Node size: 16384 Sector size: 4096 Filesystem size: 20.00GiB Block group profiles: Data: single 8.00MiB Metadata: single 8.00MiB System: single 4.00MiB SSD detected: yes Incompat features: extref, skinny-metadata Number of devices: 1 Devices: ID SIZE PATH 1 20.00GiB /dev/system_debian/btrfs
Kui plokkseadmel on btrfs initsialiseeritud, siis seda näeb
# btrfs filesystem show Label: none uuid: 32f4e998-6f70-46d0-8026-983a7ca49be7 Total devices 1 FS bytes used 497.72GiB devid 1 size 596.17GiB used 552.04GiB path /dev/xvdb Btrfs v3.17
ja olemasoleva btrfs failisüsteemi saab monteerida
# mount /dev/xvdb /mnt/btrfs
Tulemus paistab sarnaselt
# mount | grep btrfs /dev/xvdb on /mnt/btrfs type btrfs (rw,relatime,ssd,space_cache)
/etc/fstab seest kasutamisel sobib nt rida
/dev/xvdb /mnt/btrfs btrfs defaults 0 0
Märkused
- btrfs vead näevad välja sedasi
# dmesg -T ... [T sept 12 01:20:16 2017] BTRFS critical (device dm-11): corrupt leaf, bad key order: block=15365472256, root=1, slot=36 [T sept 12 01:20:16 2017] BTRFS critical (device dm-11): corrupt leaf, bad key order: block=15365472256, root=1, slot=36 [T sept 12 01:20:32 2017] BTRFS critical (device dm-11): corrupt leaf, bad key order: block=15365472256, root=1, slot=36 [T sept 12 01:20:32 2017] BTRFS critical (device dm-11): corrupt leaf, bad key order: block=15365472256, root=1, slot=36
2021 talve lõpp tähelepanekud
btrfs ressursi tekitamine, raid1
# mkfs.btrfs -m raid1 -d raid1 /dev/vdb /dev/vdc
info küsimine
root@deb11-btrfs:~# btrfs fi show Label: none uuid: f45d7103-b17b-49b6-b2ec-a3128973ce51 Total devices 1 FS bytes used 1.11GiB devid 1 size 13.21GiB used 2.52GiB path /dev/vda3 Label: none uuid: 03f35424-d3d1-4c15-82f1-12d695fe738f Total devices 2 FS bytes used 65.47MiB devid 1 size 16.00GiB used 1.28GiB path /dev/vdb devid 2 size 16.00GiB used 1.28GiB path /dev/vdc
monteerimine
# mount -o compress=zstd /dev/disk/by-uuid/03f35424-d3d1-4c15-82f1-12d695fe738f /mnt
root@deb11-btrfs:~# btrfs fi usage /mnt Overall: Device size: 32.00GiB Device allocated: 2.56GiB Device unallocated: 29.44GiB Device missing: 0.00B Used: 130.94MiB Free (estimated): 15.66GiB (min: 15.66GiB) Free (statfs, df): 15.66GiB Data ratio: 2.00 Metadata ratio: 2.00 Global reserve: 3.25MiB (used: 0.00B) Multiple profiles: no Data,RAID1: Size:1.00GiB, Used:62.81MiB (6.13%) /dev/vdb 1.00GiB /dev/vdc 1.00GiB Metadata,RAID1: Size:256.00MiB, Used:2.64MiB (1.03%) /dev/vdb 256.00MiB /dev/vdc 256.00MiB System,RAID1: Size:32.00MiB, Used:16.00KiB (0.05%) /dev/vdb 32.00MiB /dev/vdc 32.00MiB Unallocated: /dev/vdb 14.72GiB /dev/vdc 14.72GiB
subvolume nimekirja esitamiseks
root@deb11-btrfs:~# btrfs subvolume show /mnt / Name: <FS_TREE> UUID: 53622d2c-daad-48e0-84ec-de00a8d42435 Parent UUID: - Received UUID: - Creation time: 2021-02-27 11:52:54 -0500 Subvolume ID: 5 Generation: 68 Gen at creation: 0 Parent ID: 0 Top level ID: 0 Flags: - Snapshot(s):
sync
# btrfs filesystem sync /mnt
failisüsteemi suuruse vähendamine
root@deb11-btrfs:~# btrfs fi resize 2:-4g /mnt/ Resize '/mnt/' of '2:-4g' root@deb11-btrfs:~# btrfs fi resize 1:-4g /mnt/ Resize '/mnt/' of '1:-4g'
Ketta eemaldamine raid1 lülitusest
root@deb11-btrfs:~# btrfs balance start -mconvert=dup -dconvert=single /mnt root@deb11-btrfs:~# btrfs device remove /dev/vdc /mnt
Ketta lisamine raid1 lülitusse
root@deb11-btrfs:~# btrfs device add /dev/vdc /mnt root@deb11-btrfs:~# btrfs balance start -mconvert=raid1 -dconvert=raid1 /mnt
Ketaste asendamine raid1 lülituses
# btrfs replace start /dev/vdb /dev/vdd /mnt # btrfs replace status /mnt # btrfs replace start /dev/vdc /dev/vde /mnt # btrfs replace status /mnt
Kasutuse lõpetamine
# umount /mnt # wipefs --all /dev/vdb # wipefs --all /dev/vdc
subvolume kasutamine, tekitamiseks
root@deb11-btrfs:~# cd /mnt root@deb11-btrfs:~# btrfs subvolume create sv1 root@deb11-btrfs:~# btrfs subvolume create sv2 .. root@deb11-btrfs:~# btrfs subvolume create sv3/ssv1 root@deb11-btrfs:~# btrfs subvolume create sv3/ssv2 ...
tulemusena
root@deb11-btrfs:/mnt# btrfs subvolume list /mnt ID 264 gen 73 top level 5 path sv1 ID 265 gen 74 top level 5 path sv2 ID 266 gen 79 top level 5 path sv3 ID 267 gen 76 top level 266 path sv3/ssv1 ID 268 gen 77 top level 266 path sv3/ssv2 ID 269 gen 78 top level 266 path sv3/ssv3 ID 270 gen 79 top level 266 path sv3/ssv4
Spetsiifilise subvolume monteerimiseks
root@deb11-btrfs:~# mount -o subvolid=270 /dev/disk/by-uuid/03f35424-d3d1-4c15-82f1-12d695fe738f /mnt/
tulemus paistab
root@deb11-btrfs:~# findmnt /mnt TARGET SOURCE FSTYPE OPTIONS /mnt /dev/vdb[/sv3/ssv4] btrfs rw,relatime,space_cache,subvolid=270,subvol=/sv3/ssv4
snapshot tekitamiseks sobib öelda, ettevalmistamiseks
root@deb11-btrfs:/# mount -o subvolid=266 /dev/disk/by-uuid/03f35424-d3d1-4c15-82f1-12d695fe738f /mnt root@deb11-btrfs:/# ls -ld /mnt/* drwxr-xr-x 1 root root 0 Feb 27 16:31 /mnt/ssv1 drwxr-xr-x 1 root root 0 Feb 27 16:31 /mnt/ssv2 drwxr-xr-x 1 root root 0 Feb 27 16:31 /mnt/ssv3 drwxr-xr-x 1 root root 0 Feb 27 16:31 /mnt/ssv4
ja tekitamiseks
root@deb11-btrfs:/# btrfs subvolume snapshot /mnt/ssv1 /mnt/ssv1-ss-20210227-01 Create a snapshot of '/mnt/ssv1' in '/mnt/ssv1-ss-20210227-01'
tulemusena
root@deb11-btrfs:/# btrfs subvolume show /mnt/ssv1 sv3/ssv1 Name: ssv1 UUID: 0096a2da-519e-c64f-a002-2c1e3bcb1c2b Parent UUID: - Received UUID: - Creation time: 2021-02-27 16:31:21 -0500 Subvolume ID: 267 Generation: 84 Gen at creation: 76 Parent ID: 266 Top level ID: 266 Flags: - Snapshot(s): sv3/ssv1-ss-20210227-01
Dual boot süsteemi tekitamine snapshot abil
root@deb11-btrfs:~# mount /dev/vda3 /mnt root@deb11-btrfs:~# ls -ld /mnt/* drwxr-xr-x 1 root root 238 Feb 27 09:49 /mnt/@rootfs drwxr-xr-x 1 root root 250 Feb 27 10:43 /mnt/@ss root@deb11-btrfs:~# cd /mnt/ root@deb11-btrfs:/mnt# btrfs subvolume snapshot /mnt/@rootfs /mnt/@ss2 Create a snapshot of '/mnt/@rootfs' in '/mnt/@ss2' root@deb11-btrfs:/mnt# ls -ld /mnt/* drwxr-xr-x 1 root root 238 Feb 27 09:49 /mnt/@rootfs drwxr-xr-x 1 root root 250 Feb 27 10:43 /mnt/@ss drwxr-xr-x 1 root root 238 Feb 27 09:49 /mnt/@ss2
Tulemusena saab arvuti bootida /mnt/@ss2 pealt (/mnt/@ss2/etc/fstab failis muuta / failisüsteemi seade ning grub bootloaderis rootflags väärtus).
send-receive abil @rootfs -> @rootfs_alt
root@deb11-btrfs:~# mount --uuid=f45d7103-b17b-49b6-b2ec-a3128973ce51 /mnt root@deb11-btrfs:~# btrfs subvolume create /mnt/@snapshots root@deb11-btrfs:~# btrfs subvolume snapshot -r /mnt/@rootfs /mnt/@rootfs-ss-ro-tmp root@deb11-btrfs:~# btrfs send /mnt/@rootfs-ss-ro-tmp | btrfs receive /mnt/@snapshots root@deb11-btrfs:~# btrfs subvolume delete /mnt/@rootfs-ss-ro-tmp root@deb11-btrfs:~# btrfs property set -t s /mnt/@snapshots/@rootfs-ss-ro-tmp ro false root@deb11-btrfs:~# mv /mnt/@snapshots/@rootfs-ss-ro-tmp/ /mnt/@rootfs-alt
initramfs juures btrfs muudatuste tegemiseks tuleb
- jõuda nt break=mount abil initramfs prompti
- laadida btrfs moodul, modprobe btrfs
- küsida btrfs failisüsteemide uuid väärtused, btrfs filesystem show
- tekitada mount point mkdir /mnt-tmp
- mounteerida sobiv, mount /dev/disk/by-uuid/xxx /mnt-tmp
- toimetada, nt btrfs subvolume list /mnt-tmp
- monteerida lahti, umount /mnt
- sync
- exit alglaadimise jätkamiseks, reboot -f rebootimiseks
Juurfailisüsteemi suurendamine
TODO
Plokkseadme lisamine ja uue failisüsteemi ja subvolume evitamine
- Lisada virtuaalse arvutile juurde järgmine plokkseade, nt /dev/vdb
- tekitada btrfs failisüsteem /dev/vdb seadmele
# mkfs.btrfs /dev/vdb
- monteerida tmp asukohta
# mkdir /mnt/vdb # mount /dev/vdb /mnt/vdb
- moodustada subvolume
# btrfs subvolume create /mnt/vdb/@srv
- mounteerida failisüsteem lahti
# umount /mnt/vdb
- küsida failisüsteemi uuid väärtus - 2ef7dd2b-4736-47d6-8d50-5622b8ceaea4
# btrfs fi show Label: none uuid: 3c9709f5-180e-4662-9d2b-740419f3f030 Total devices 1 FS bytes used 4.37GiB devid 1 size 5.07GiB used 5.05GiB path /dev/vda2 Label: none uuid: 2ef7dd2b-4736-47d6-8d50-5622b8ceaea4 Total devices 1 FS bytes used 2.29GiB devid 1 size 8.00GiB used 2.96GiB path /dev/vdb
- tekitada fstab sissekanne
UUID=2ef7dd2b-4736-47d6-8d50-5622b8ceaea4 /srv btrfs defaults,subvol=@srv 0 0
- monteerida külge
# mount /srv
- Tulemusena on
root@postkast-01:~# btrfs subvolume list /srv ID 258 gen 15 top level 5 path @srv root@postkast-01:~# btrfs subvolume show /srv @srv Name: @srv UUID: 63b54aa2-77b6-824f-ac2e-24e9c1cf49a4 Parent UUID: - Received UUID: - Creation time: 2022-02-02 01:36:49 +0200 Subvolume ID: 258 Generation: 15 Gen at creation: 8 Parent ID: 5 Top level ID: 5 Flags: - Snapshot(s):