воскресенье, 16 августа 2015 г.

Btrfs instead LVM

Після ганебного ступору відносно btrfs під час установки Arch Linux стало цікаво - чи може btrfs гідно замінити LVM?..
До цього я вивчав btrfs на домашньому нетбуці, але справа не дійшла далі об"єднання розділів у рейд.
У цейтноті з наскоку інтуїтивно вирішити LVM-мовські задачі, використовуючи лише btrfs, не вдалося.
Заздалегідь я вирішив не використовувати btrfs в LV, бо окрім того, що це зручно, інших плюсів не має: буде трохи повільніше працювати, LVM snapshots недосконалі тощо.

Порівняння потрібних мені можливостей LVM та btrfs:
1) LVM дозволяє створювати VGs, які можна збільшувати і збільшувати додаванням нових і нових фізичних розділів. Btrfs створює ФС в яку теж можна додавати нові фізичні розділи. Залишилося незрозумілим одне: можна створити ФС менше ніж фізичний розділ (mkfs.btrfs -b50G /dev/sdaX), або зменшити потім (btrfs fi re -10G /), але навіщо це робити і як можна використовувати залишений простір - не ясно.
2) З VG можна нарізати LVs. В btrfs можна створювати subvolumes.
3) На LV можна створити "любу" ФС і в підсумку отримати букет з різних ФС. Btrfs - це лише ФС btrfs.
4) З LV можна створювати snapshots. Btrfs справляється с цим завданням ще краще.
5) Можна задати розмір LV. А от btrfs типово цього не робить, тобто якийсь юзер може заповнити усю ФС із subvolume home. Пишуть, що є вихід - це квоти.
6) Питання з btrfs FAQ.
7) How big my stanpshots?
du only tells you how big the entire snapshot is and not how much of the snapshot is exclusive to this snapshot only.
With quota and qgroups we can see that.

Далі тренування на нетбуці.

Що я наразі маю: два фізичні розділи об"єднані в RAID0.

# btrfs filesystem show /
Label: none  uuid: 87b676ef-c950-4554-abf3-137c8f59abfe
    Total devices 2 FS bytes used 17.21GiB
    devid    1 size 20.00GiB used 9.78GiB path /dev/sda6
    devid    2 size 20.00GiB used 9.78GiB path /dev/sda7

# btrfs fi df /
Data, RAID0: total=18.00GiB, used=16.84GiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=768.00MiB, used=381.80MiB
GlobalReserve, single: total=128.00MiB, used=0.00B

# btrfs fi usage /
Overall:
    Device size:          40.00GiB
    Device allocated:          19.56GiB
    Device unallocated:          20.44GiB
    Device missing:             0.00B
    Used:              17.59GiB
    Free (estimated):          21.60GiB    (min: 11.38GiB)
    Data ratio:                  1.00
    Metadata ratio:              2.00
    Global reserve:         128.00MiB    (used: 0.00B)

Data,RAID0: Size:18.00GiB, Used:16.84GiB
   /dev/sda6       9.00GiB
   /dev/sda7       9.00GiB

Metadata,RAID1: Size:768.00MiB, Used:381.70MiB
   /dev/sda6     768.00MiB
   /dev/sda7     768.00MiB

System,RAID1: Size:32.00MiB, Used:16.00KiB
   /dev/sda6      32.00MiB
   /dev/sda7      32.00MiB

Unallocated:
   /dev/sda6      10.22GiB
   /dev/sda7      10.22GiB

"Щоб продати якийсь непотріб, треба спочатку купити якийсь непотріб..."
Щоб видалити один розділ, треба спочатку все вмістити на той що залишається.
Тому видаляю snapshot root_15-07-20_22-17.

# btrfs sub li /
ID 259 gen 87947 top level 5 path root_after_installation
ID 362 gen 87988 top level 5 path root
ID 375 gen 87975 top level 362 path var/lib/machines
ID 406 gen 87947 top level 5 path root_15-07-20_22-17

# mount /subvolumes/
# ls /subvolumes/
root  root_15-07-20_22-17  root_after_installation
# cd /subvolumes/
# du -ch -d1 ./
732M    ./root_after_installation
8.4G    ./root
13G    ./root_15-07-20_22-17
22G    ./
22G    total

# btrfs sub del ./root_15-07-20_22-17
Delete subvolume (no-commit): '/subvolumes/root_15-07-20_22-17'

Теперь намагаюся видалити фізичний розділ /dev/sda7.

btrfs device delete /dev/sda7 /
ERROR: error removing the device '/dev/sda7' - unable to go below two devices on raid1

btrfs balance start -dconvert=raid0 /
Done, had to relocate 9 out of 13 chunks

btrfs device delete /dev/sda7 /
ERROR: error removing the device '/dev/sda7' - unable to go below two devices on raid1

# btrfs balance start -mconvert=raid0 --force /
Done, had to relocate 4 out of 13 chunks

# btrfs device remove /dev/sda7 /

#  btrfs filesystem show /
Label: none  uuid: 87b676ef-c950-4554-abf3-137c8f59abfe
    Total devices 1 FS bytes used 7.95GiB
    devid    1 size 20.00GiB used 9.78GiB path /dev/sda6

# btrfs fi df /
Data, single: total=9.00GiB, used=7.68GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=768.00MiB, used=269.92MiB
GlobalReserve, single: total=96.00MiB, used=0.00


Наступне завдання таке: створити фізичний розділ, добавити в btrfs, створити subvolumes та назначити квоти.

  802  cp -r /home/ /home1
  803  ls /home/
  804  ls /home1/
  805  du -ch -d1 /home
  806  du -ch -d1 /home1
  807  umount /home
  808  rmdir /home
  809  btrfs de add
  810  btrfs de add /dev/sda7 /
  811  btrfs de add /dev/sda7 / -f
  814  cd /   821  btrfs sub cr /home
  822  ls /home
  829  cp -ax --reflink=always home1/. home
  830  du -ch -d1 /home
  831  du -ch -d1 /home1
  834  rm -r /home1
  836  du -ch -d1 /home

# btrfs sub li /
ID 259 gen 88171 top level 5 path root_after_installation
ID 362 gen 88701 top level 5 path root
ID 375 gen 88463 top level 362 path var/lib/machines
ID 432 gen 88703 top level 362 path home

# btrfs qg sh -r /
ERROR: can't perform the search - No such file or directory
ERROR: can't list qgroups: No such file or directory

# btrfs qu en /

# btrfs qg sh -r /
qgroupid         rfer         excl     max_rfer
--------         ----         ----     --------
0/5          16.00KiB     16.00KiB         none
0/259       709.96MiB    676.28MiB         none
0/362         3.17GiB      3.13GiB         none
0/375        16.00KiB     16.00KiB         none
0/432         3.40GiB      3.40GiB         none

# btrfs qg li 40G /home

# btrfs qg sh -r /
qgroupid         rfer         excl     max_rfer
--------         ----         ----     --------
0/5          16.00KiB     16.00KiB         none
0/259       709.96MiB    676.28MiB         none
0/362         3.17GiB      3.13GiB         none
0/375        16.00KiB     16.00KiB         none
0/432         3.40GiB      3.40GiB     40.00GiB

1 комментарий:

  1. Можливо, раніше знав, але вже забув.
    1) Є flat (плоска), nested (вкладена) та mixed (змішана) subvolumes layouts (схеми створення підтомів).
    Плоска - це якщо не монтувати вищий рівень ФС, але в ньому на одному рівні створити потрібні підтома, які потім монтувати у fstab.
    Вкладена - це якщо створювати підтома там, де вони потрібні бути. При цьому достатньо лише монтувати вищий рівень ФС, а підтома будуть монтуватися автоматично (не треба прописувати у fstab) і наслідувати параметри батьківського підтому.
    У мене в результаті склалася змішана схема - не монтую вищий рівень, а на вищому рівні зберігаю підтома (крім home) і резервні знімки (плоска), підтом home створений в підтомі root і монтується автоматично (вкладена).
    2) Вкладені підтома-нащадки виключаються при виконанні знімку батьківского підтому. Це я недавно виявив, коли не знайшов підтом home у знімку підтому root.

    ОтветитьУдалить