LINUX.ORG.RU
ФорумAdmin

Про операцию trim на хостах виртуализации pve

 , ,


0

3

Как работает trim на хостах pve? Мы разрешили discard для гостевых машин и в них работает вызов fstrim

Jun 09 00:04:04 backend fstrim[1725601]: /: 32.4 GiB (34754322432 bytes) trimmed on /dev/disk/by-uuid/b388b8f9-8ac5-494f-91aa-6399c248acf9
Jun 16 00:08:57 backend fstrim[243125]: /: 29.9 GiB (32120410112 bytes) trimmed on /dev/disk/by-uuid/b388b8f9-8ac5-494f-91aa-6399c248acf9
Jun 23 00:09:55 backend fstrim[2933059]: /: 34.4 GiB (36972310528 bytes) trimmed on /dev/disk/by-uuid/b388b8f9-8ac5-494f-91aa-6399c248acf9

Далее, на хосте тоже работает вызов fstrim

Aug 18 00:50:51 pve fstrim[1284794]: /boot: 891.8 MiB (935067648 bytes) trimmed on /dev/md0
Aug 18 00:50:51 pve fstrim[1284794]: /: 31.4 GiB (33708711936 bytes) trimmed on /dev/mapper/vgssd-root
Aug 25 00:38:39 pve fstrim[151816]: /boot: 0 B (0 bytes) trimmed on /dev/md0
Aug 25 00:38:39 pve fstrim[151816]: /: 3.1 GiB (3323039744 bytes) trimmed on /dev/mapper/vgssd-root

Вот так выглядит вызов fstrim из debian, например

cat /lib/systemd/system/fstrim.service
[Unit]
Description=Discard unused blocks on filesystems from /etc/fstab
Documentation=man:fstrim(8)
ConditionVirtualization=!container

[Service]
Type=oneshot
ExecStart=/sbin/fstrim --listed-in /etc/fstab:/proc/self/mountinfo --verbose --quiet-unsupported
PrivateDevices=no
PrivateNetwork=yes
PrivateUsers=no
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
MemoryDenyWriteExecute=yes
SystemCallFilter=@default @file-system @basic-io @system-service

то есть, оно трогает только примонтированные сущности. НО. Сама по себе операция trim выполняется кодом прошивки контроллера конкретного накопителя. Но мы не работаем непосредственно с накопителями. Накопители состоят в raid. Поверх raid размещён LVM. И уже на LV размещены файловые системы, которые примонтированы в OS.

Как работает fstrim? Нужно ли разрешать-вызывать trim на гостевых машинах? Нужно ли переделывать вызов trim на хостах виртуализации?

В общем, вообще нет понимания как это работает. Помогите понять.

★★★★★

Операция trim на виртуалке означает, что команда trim отправляется бэкенду. Что бэкенд с ней делает - знает только бэкенд. Например, бекенд qcow2 поддерживает опцию discard=unmap, которая уменьшает размер файла образа диска при использовании trim. А iscsi, сам понимаешь, передаст эту команду как есть, и на том конце уже или есть поддержка, или нет.

Если у тебя просто разделы смонтированы как тома гостевых ОС, того в твоей конфигурации трим эффекта иметь не будет.

В любом случае, надо курить документацию на конкретный драйвер хранилища, может, там что-то новое появилось.

Aceler ★★★★★
()
Ответ на: комментарий от targitaj

Если образы дисков виртуалок храняться на гипервизоре как qcow2 файлы на файловой системе гипервизора, и настройка discard=unmap виртуальных дисков включена, то:

  • lsblk -D в госте покажет гранулярность дискарда
  • fstrim в госте будет дискардить неаллоцированные блоки файловой системы гостя с этой гранулярностью
  • qcow2 драйвер в qemu при получении дискарда будет прорезать дырку в qcow2 файле
  • файловая система гипервизора будет деаллоцировать блоки дырок
  • lsblk -D на гипервизоре покажет гранулярность дискарда
  • fstrim на гипервизоре будет дискардить неаллоцированные блоки с этой гранулярностью
  • логический том будет пересылать дискарды в MD том
  • MD том будет пересылать дискарды на диски
  • MD RAID5 том имеет гранулярность дискарда размером в полный страйп (т.е. дискард полного страйпа приводит к дискарду чанка на каждом диске, в том числе и парити чанка).
  • LVM том будет иметь гранулярность дискарда как у нижележащего MD тома.
iliyap ★★★★★
()
Ответ на: комментарий от targitaj

Ты бы сразу написал, что это не lv, а lv-thin. Разные вещи.

При использовании lv-thin trim поддерживается, только на уровне размера блока PV.

И не надо выполнять таймер fstrim, он вообще для файловых систем.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

И не надо выполнять таймер fstrim, он вообще для файловых систем.

Почему не надо? ФС освобождает блоки, отдает discard ниже блочному устройству. Тот передает дальше

Дойдет это до backend’а или нет, другое дело, но вреда точно не будет

router ★★★★★
()
Ответ на: комментарий от Aceler

В его случае не надо, у него данные на lv, а не на фс, хост не в курсе, что там.

Надо. Но на стороне гостя

Но разумеется trim должен быть включен и в конфигах lvm (issue_discards = 1 и для хоста, и для гостя), и mdadm (options raid456 devices_handle_discard_safely=1 ), и в свойствах виртуального дискового контроллера у ВМ (discard=‘unmap’)

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)