Btrfs failisüsteemi kasutamine Debianiga

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

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):

Suuruse suurendamiseks sobib esmalt töötavale arvuti plokkseadmele lisada nt Proxmox PVE keskkonnas mahtu juurde ning seejärel öelda (kui kasutatakse lihtsat ühest plokkseadmest koosnevat btrfs lahendust)

root@postkast-01:~# btrfs fi resize max /srv

2022 alguse tähelepanekud

raid0 tekitamine

# mkfs.btrfs -d single /dev/sdc2 /dev/sdd2
btrfs-progs v5.16.2 
See http://btrfs.wiki.kernel.org for more information.

NOTE: several default settings have changed in version 5.15, please make sure
      this does not affect your deployments:
      - DUP for metadata (-m dup)
      - enabled no-holes (-O no-holes)
      - enabled free-space-tree (-R free-space-tree)

Label:              (null)
UUID:               7b652fec-b6cf-45e2-b8e4-b21c51929a5d
Node size:          16384
Sector size:        4096
Filesystem size:    7.28TiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         RAID1             1.00GiB
  System:           RAID1             8.00MiB
SSD detected:       no
Zoned device:       no
Incompat features:  extref, skinny-metadata, no-holes
Runtime features:   free-space-tree
Checksum:           crc32c
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1     3.64TiB  /dev/sdc2
    2     3.64TiB  /dev/sdd2

2022 lõpp tähelepanekud

root@pve-moraal-x570:~# mkfs.btrfs -f -m raid1 -d raid1 /dev/nvme0n1p3 /dev/nvme1n1p3 
btrfs-progs v5.16.2 
See http://btrfs.wiki.kernel.org for more information.

Performing full device TRIM /dev/nvme0n1p3 (838.02GiB) ...
NOTE: several default settings have changed in version 5.15, please make sure
      this does not affect your deployments:
      - DUP for metadata (-m dup)
      - enabled no-holes (-O no-holes)
      - enabled free-space-tree (-R free-space-tree)

Performing full device TRIM /dev/nvme1n1p3 (838.02GiB) ...
Label:              (null)
UUID:               6a75250f-9bc6-4d3d-84e5-39aac7dc6711
Node size:          16384
Sector size:        4096
Filesystem size:    1.64TiB
Block group profiles:
  Data:             RAID1             1.00GiB
  Metadata:         RAID1             1.00GiB
  System:           RAID1             8.00MiB
SSD detected:       yes
Zoned device:       no
Incompat features:  extref, skinny-metadata, no-holes
Runtime features:   free-space-tree
Checksum:           crc32c
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1   838.02GiB  /dev/nvme0n1p3
    2   838.02GiB  /dev/nvme1n1p3

2024 alguse tähelepanekud

Kui proxmox host/node peal on btrfs tugi ning virtuaalses arvutis on kasutatud btrfs failisüsteemi, siis tõenäoliselt paistab see kasutus välja host peal

root@pm60-trt:~# btrfs fi show
Label: none  uuid: 728bbfbd-61c2-4bf8-9616-2a9442644d0e
	Total devices 2 FS bytes used 1.54TiB
	devid    1 size 931.50GiB used 931.50GiB path /dev/nvme0n1p3
	devid    2 size 931.50GiB used 931.50GiB path /dev/nvme1n1p3

Label: none  uuid: 3768c649-b56f-4590-947e-80b2ecf8f8dc
	Total devices 1 FS bytes used 66.95GiB
	devid    1 size 72.00GiB used 72.00GiB path /dev/mapper/pve_trt2-vm--203--disk--2

Label: none  uuid: 5a9f34d3-a4c0-4a81-943b-15e2b277b5f5
	Total devices 1 FS bytes used 1.45GiB
	devid    1 size 13.21GiB used 2.52GiB path /dev/zd1856p3

kus

  • 'man btrfs-filesystem' leiab btrfs ressursi üles lvm ja zfs põhiselt proxmox storage'lt
  • soov oleks btrfs puhul kasutada analoogset lahendust nagu on nt lvm puhul olemas, st saab /etc/lvm/lvm.conf failis kirjeldada global_filter vms kitsenduse

Kasulikud lisamaterjalid