So how do I replace a fresh writable root subvolume from a received snapshot?
Вы не можете.
В вашем случае верхний -уровень (корневой )подтом (с идентификатором 5 )является
/
вашей файловой системы Linux; Ничто не может существовать рядом с ним. Как вы обнаружили,btrfs-receive
создает подтом -только для чтения, поэтому вам нужно создать подтом для чтения -записи моментального снимка из только одного чтения -, и для этого вам понадобится чтобы иметь возможность создать подтом за пределами/
; Следовательно, почему вы не можете заменить подтом верхнего уровня -.Обратите внимание, что вы сказали:
I have created a readonly snapshot of the fs I want to convert first and started sending it into a subvolume in another fs.
Однако вы создали доступный -только для чтения моментальный снимок подтома , а не файловой системы BTRFS в целом. Я не понимаю, как вы сможете создать снимок верхнего -уровня. Странный.
Лучше всего использовать такой инструмент, как
partclone
, для резервного копирования всей файловой системы и последующего восстановления из нее. В противном случае вам придется изменить макет подтома с плоского , который у вас есть, на вложенный . С вложенным макетом у вас будет что-то вроде этого:/ (top-level) | |__ /rootfs (subvolume) | | | _/home | |__ /rootfs-backup (read-only subvolume, which you can delete later) | | | _/home
Вложенный макет дает вам возможность создавать моментальные снимки любого подтома в файловой системе (, кроме верхнего -уровня, который вам в любом случае не понадобится ). Тогда вы просто смонтируете подтом
rootfs
на/
вместо всей файловой системы. Например:mount -t btrfs /dev/sda1 -o defaults,subvol=/rootfs
Одна из возможностей состоит в том, чтобы просто удалить «заархивированные» файлы журналов systemd, т. е. те, которые systemd закрыла. Это файлы в /var/log/journal/*
с @
в их имени, согласноman systemd-journald
:«Когда systemd -journald прекращает запись в файл журнала, он будет переименован в «исходное -name@suffix. журнал" (или "исходное -имя@суффикс.журнал ~" ). Такие файлы "заархивированы" и больше не будут записываться в них")
Перед этим вы можете по желанию чередовать файлы, чтобы убедиться, что текущие файлы заархивированы, если вы хотите быть уверены, что переместили все записи журнала. Это было бы просто sudo journalctl --rotate
. Затем вы можете сделать следующее, чтобы заархивировать старые журналы:sudo mv /var/log/journal/*/*@* /mnt/wherever
.
Другой вариант, если вы хотите сохранить в журналах только те файлы, которые старше определенной даты, — использовать journalctl --until
для отображения журналов до определенной даты (и сохранения их где-нибудь ), а затем journalctl --vacuum-time
для удалить журналы за соответствующий период времени.