Подтома btrfs

Подтома (subvolumes) btrfs.

Содержание

1 Именование подтомов

  • Для определённости я называю подтома по шаблону @имя_подтома.

1.1 Список подтомов

Таблица 1: Возможные наименования подтомов btrfs
ПодтомТочка монтированияОписание
@/Корневой каталог (системные файлы)
@home/homeДомашний каталог с пользовательскими данными
@root/rootДомашний каталог пользователя root
@snapshotsКорневой подтом для снапшотов
@snapshots@root/.snapshotsСодержит снапшоты корня, которые создает snapper
@snapshots@home/home/.snapshotsСодержит снапшоты домашнего каталога, которые создает snapper
@machines/var/lib/machinesЕсли не существует, то создаст systemd
@portables/var/lib/portablesЕсли не существует, то создаст systemd
@docker/var/lib/dockerДокер создаёт подтома в ./btrfs/subvolumes либо в ./XXX/btrfs/subvolumes
@var/varАналогично выше описанному
@var@lib/var/libВместо создания @machines, @portables, @docker можно создать только этот, если в /var/lib не будет храниться чего-то важного
@var@tmp/var/tmpСодержит временные файлы. Должен монтироваться с nodatacow
@var@log или @log/var/logСодержит большое количество файлов, которые пишутся маленькими частями. Должен монтироваться с nodatacow
@swap/swap или /var/swap, или /var/lib/swapПодтом для файла подкачки. Должен монтироваться с nodatacow (см. Файл подкачки на btrfs)
@libvirt/var/lib/libvirt/imagesОбразы для libvirt. Должен монтироваться с nodatacow

1.2 Минимально рекомендуемый набор подтомов

  • Минимум нужны два подтома: @ и @home.

2 Создание подтомов

  • При установки системы я создаю подтома следующим образом:
    • Подмонтируем раздел с btrfs:
      mkdir /mnt/gentoo
      mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9 /dev/sdc2 /mnt/gentoo/
      
    • Создадим подтома на btrfs:
      cd /mnt/gentoo/
      btrfs subvol create @
      btrfs subvol create @var
      btrfs subvol create @var@tmp
      btrfs subvol create @var@log
      btrfs subvol create @vm
      btrfs subvol create @portage
      btrfs subvol create @portage@local
      btrfs subvol create @portage@com
      btrfs subvol create @libvirt
      btrfs subvol create @home
      

3 Отключение CoW

  • Для файловых систем с образами виртуальных машин следует отключить CoW (copy-on-write).
  • Так же стоит отключить CoW для часто изменяемых файлов (например, журналов).
  • Подмонтируем файловую систему btrfs:
    mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@vm /dev/sdc2 /mnt/gentoo/var/vm
    mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@libvirt /dev/sdc2 /mnt/gentoo/var/lib/libvirt/images
    mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@var@log /dev/sdc2 /mnt/gentoo/var/log
    mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@var@tmp /dev/sdc2 /mnt/gentoo/var/tmp
    
  • Отключим для этого подтома CoW:
    • Для /var/vm
      cd /mnt/gentoo/var/
      chattr +C vm
      
    • Для /var/lib/libvirt/images
      cd /mnt/gentoo/var/lib/libvirt/
      chattr +C images
      
    • Для /var/log
      cd /mnt/gentoo/var/
      chattr +C log
      
    • Для /var/tmp
      cd /mnt/gentoo/var/
      chattr +C tmp
      
  • Посмотреть результат можно командой:
    lsattr -a /mnt/gentoo/var/
    lsattr -a /mnt/gentoo/var/lib/libvirt/
    

4 Монтирование подтомов в fstab

  • При монтировании я указываю универсальный идентификатор (UUID) файловой системы:
    # /etc/fstab
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /               btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@    0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /var            btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@var 0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /var/tmp        btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@var_tmp     0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /var/vm         btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@vm          0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /home           btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@home        0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /usr/portage    btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@portage     0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /usr/local/share/portage        btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@portage_local       0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"     /com/lib/portage        btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@portage_com 0 0
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"    /var/lib/libvirt/images       btrfs   relatime,discard=async,autodefrag,compress=zstd:9,subvol=@libvirt 0 0
    
  • Идентификатор файловой системы можно узнать следующим образом:
    blkid /dev/sdc2
    

5 Создание нового подтома

  • После установки системы может возникнуть необходимость создания дополнительных подтомов на существующем томе.
    mkdir /mnt/btrfs
    mount UUID=f8963df3-1320-4bc0-a125-62be185b029e /mnt/btrfs
    btrfs subvolume create /mnt/btrfs/@data
    
  • Подключим в /etc/fstab:
    UUID="f8963df3-1320-4bc0-a125-62be185b029e"	/data		btrfs	relatime,discard=async,autodefrag,compress=zstd:9,subvol=@data        0 0
    

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры прикладной информатики и теории вероятностей

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие