![Непустые точки монтирования с btrfs (SLES15): нужны ли они?](https://rvso.com/image/1672329/%D0%9D%D0%B5%D0%BF%D1%83%D1%81%D1%82%D1%8B%D0%B5%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%BC%D0%BE%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D1%81%20btrfs%20(SLES15)%3A%20%D0%BD%D1%83%D0%B6%D0%BD%D1%8B%20%D0%BB%D0%B8%20%D0%BE%D0%BD%D0%B8%3F.png)
У меня многолетний опыт работы с UNIX, но, думаю, я совершил фатальную ошибку:
Увидев сообщения во время загрузки о непустых точках монтирования, я рискнул очистить их во время миграции системы в новую среду. Я загрузил SLES Rescue System, смонтировал корневую файловую систему и базовую структуру системы (proc, sys, dev) на /mnt
, затем сделал chroot /mnt
и mount -va
.
Итак, все выглядело хорошо, я изменил некоторые параметры конфигурации и во время размонтирования проверил точки монтирования. Например:
/var/cache
был смонтирован, umount
успешно, но все еще ll /var/cache
показывал непустую точку монтирования, в то время как файловая система отображалась не смонтированной. Поэтому я удалил содержимое.
По сути, я повторил шаги для каждой смонтированной файловой системы, затем вышел из chroot
среды, размонтировал остальное и перезагрузился.
К сожалению, система не загружается, так как GRUB жалуется, что не может найти normal.mod
.
Так это особенность btrfs subvolumes? Кто может объяснить, что происходит?
/etc/fstab
Как меня и просили /etc/fstab
, вот что имеет типичная система:
/dev/sys/root / btrfs defaults 0 0
/dev/sys/root /var btrfs subvol=/@/var 0 0
/dev/sys/root /usr/local btrfs subvol=/@/usr/local 0 0
/dev/sys/root /tmp btrfs subvol=/@/tmp 0 0
/dev/sys/root /srv btrfs subvol=/@/srv 0 0
/dev/sys/root /root btrfs subvol=/@/root 0 0
/dev/sys/root /opt btrfs subvol=/@/opt 0 0
UUID=9fd27493-d194-48ba-a4bc-3551123e0d3b /home xfs defaults 0 0
/dev/sys/boot /boot btrfs defaults 0 0
UUID=0092-D1D5 /boot/efi vfat utf8 0 2
/dev/sys/root /.snapshots btrfs subvol=/@/.snapshots 0 0
решение1
Как это работало
/dev/sys/root
содержит файловую систему Btrfs. Несколько записей в вашем fstab
монтировании различных ее подтомов к разным точкам монтирования.
Гипотеза: подтом по умолчанию в файловой системе Btrfs /dev/sys/root
находится в /@
, и как только он смонтирован в /
, монтируется множество других подтомовв их конкретных точках крепленияне имеет особого смысла, поскольку нужные (и обычно непустые) каталоги уже находятся там, где вы их ожидаете.
(Чтобы увидеть подтом по умолчанию, запустите sudo btrfs subvolume get-default /
.)
Пожалуйста прочтиэто еще один мой ответи понять концептуальную разницу между деревом каталогов Btrfs (и подтомов) на устройстве и структурой каталогов в вашей ОС. Без этих знаний остальная часть текущего ответа может оказаться для вас очень запутанной.
Если субтом по умолчанию/@
, /@
из дерева Btrfs выглядит так же, как /
в дереве ОСвместе со всем, что ниже. Это креплениеодиндостаточно увидеть, например, каталог /@/var
из дерева Btrfs как /var
в дереве ОС. Я имею в виду, если вы попытаетесь получить доступ/var
до /var
затем монтируется
- ОС проверит,
/var
является ли (ОС) точкой монтирования; это не так; - поэтому ОС проверит,
/
является ли (ОС) точкой монтирования; это так и она связана с/@
Btrfs; - поэтому ОС покажет вам
/@/var
Btrfs как/var
ОС.
Так уж получилось /@/var
, что Btrfs — это подтом.Кроме тогомонтирование subvol=/@/var
в /var
(ОС) приведет к появлению того же каталога, что и /var
(ОС). В частности, если вы сейчас получите доступ к /var
то
- ОС проверит,
/var
является ли (ОС) точкой монтирования; она является таковой и связана с/@/var
Btrfs; - поэтому ОС покажет вам
/@/var
Btrfs.
А если вы отмонтируете /var
(ОС), то вы вернетесь к первому случаю.
Так что неважно, /var
смонтирована (ОС) или нет (фактически неважно, могут быть тонкости). Так или иначе вы увидите /@/var
Btrfs /var
в ОС.
Несколько других записей в вашем fstab
монтировании различных подтомовгде бы вы их ни увидели. Я на самом деле не вижу смысла в этих записях (возможно, смысл в какой-то тонкости, которую я не могу сейчас распознать; или эти записи действительно совершенно бессмысленны).
Для сравнения: если бы /var
(ОС) была смонтирована с помощью, subvol=/var
то монтирование имело бы смысл, поскольку /var
Btrfs не находится под /@
Btrfs, и, таким образом, вы не можете получить к нему доступ, просто смонтировав /@
Btrfs как /
ОС.
Как ты это сломал
… был смонтирован,
umount
успешно, но все ещеll …
показывал непустую точку монтирования, в то время как файловая система отображалась не смонтированной. Поэтому я удалил содержимое.
Как я уже сказал, несколько записей в вашем fstab
монтировании различных подтомов, где вы бы их увидели в любом случае. В этих случаях, удаляя содержимое после того, как umount
вы удалили содержимое, которое вы видели ранее umount
. Вы думали, что удалили затененное, нерелевантное содержимое, но на самом деле вы удалили фактическое, важное содержимое.
Однако есть две вещи, которые не вписываются:
- В вашем примере точка монтирования — , вы якобы ее размонтировали; но в опубликованном вами файле
/var/cache
ее нет ./var/cache
fstab
- Согласно тому
fstab
, что вы разместили, в то время как/
(ОС) происходит из/dev/sys/root
,/boot
(ОС) происходит из/dev/sys/boot
. Описанный механизм поломки вещей не может быть применен. Тем не менее, вы утверждаете, что "GRUB жаловался, что не может найтиnormal.mod
", и из этого я делаю вывод, что вы действительно сломали вещи под/boot
каким-то образом.
Поэтому я подозреваю, что опубликованное fstab
(вы описали это как «то, что есть в типичной системе») не являетсяточный fstab
затронутой ОС. Я подозреваю, /boot
что там использовалась та же файловая система, что и /
, была без необходимости смонтирована и, таким образом, подвержена описанному сценарию поломки.