Как удалить вложенные тома btrfs с <FS_TREE> в их имени

9

У меня есть куча снимков btrfs примерно так:

20:17:37 [root@galaxy /]$ btrfs subvolume list -a / |grep apt
ID 271 gen 348 top level 5 path <FS_TREE>/@apt-snapshot-2013-04-17_21:44:30
ID 272 gen 352 top level 5 path <FS_TREE>/@apt-snapshot-2013-04-17_21:46:25
ID 273 gen 361 top level 5 path <FS_TREE>/@apt-snapshot-2013-04-17_21:51:13
... # lots more

Я хотел бы избавиться от них. Так я попробовал

20:21:31 [root@galaxy ~]$ btrfs subvolume delete '/<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '/<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
20:21:36 [root@galaxy ~]$ btrfs subvolume delete '<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
20:21:43 [root@galaxy ~]$ btrfs subvolume delete '/@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '/@apt-snapshot-2013-04-17_21:44:30'
20:21:47 [root@galaxy ~]$ btrfs subvolume delete '@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '@apt-snapshot-2013-04-17_21:44:30'

Какой правильный синтаксис для удаления этих снимков?

Кактус
источник

Ответы:

10

Мне удалось удалить эти снимки, сначала смонтировав весь том btrfs (не @вложенный том), а затем поработав оттуда:

# mount /dev/mapper/whatever /mnt -o subvol=/
# ls /mnt
@
@apt-snapshot-2013-04-17_21:44:30
...

Таким образом, на данный момент все подобъемы (включая фанки apt-snapshot) видны в /mnt, так что мы можем удалить их:

# btrfs subvol delete /mnt/@apt-snapshot-2013-04-17_21:44:30
# umount /mnt
Кактус
источник
2
Вы должны были использовать живой компакт-диск для этого?
mlissner
2
Нет, я смог сделать это при запуске системы из @той же файловой системы.
Кактус
1

Самый простой способ сделать это - использовать встроенные apt-btrfs-snapshotкоманды:

В отличие от обычного удаления снимка, вам не нужно монтировать файловую систему для удаления снимков.

Сначала перечислите доступные apt-btrfs-snapshotснимки, используя следующую команду:

sudo apt-btrfs-snapshot list

Вот пример вывода этой команды:

@apt-snapshot-old-root-2015-10-19_20:20:10
@apt-snapshot-2015-10-28_19:00:46
@apt-snapshot-2015-10-28_19:09:14
@apt-snapshot-2015-10-29_04:40:07
@apt-snapshot-2015-10-29_06:35:57
@apt-snapshot-2015-10-29_07:03:39
@apt-snapshot-2015-10-30_03:49:05
@apt-snapshot-2015-10-30_17:53:59

Чтобы удалить снимок @apt-snapshot-2015-10-30_17:53:59, запустите:

sudo apt-btrfs-snapshot delete @apt-snapshot-2015-10-30_17:53:59

Вы также можете удалить несколько снимков по дате. Вот пример команды, которая удаляет все снимки, которые старше 0 дней.

sudo apt-btrfs-snapshot delete-older-than 0d   

Вот пример вывода этой команды:

Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-odfe0o4g/@apt-snapshot-old-root-2015-10-19_20:20:10'
ERROR: cannot delete '/tmp/apt-btrfs-snapshot-mp-odfe0o4g/@apt-snapshot-old-root-2015-10-19_20:20:10' - Directory not empty
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-b2zv18qr/@apt-snapshot-2015-10-28_19:00:46'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-zjglvefe/@apt-snapshot-2015-10-28_19:09:14'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-lj3v74qa/@apt-snapshot-2015-10-29_04:40:07'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-vztc82zr/@apt-snapshot-2015-10-29_06:35:57'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-q0ou8e24/@apt-snapshot-2015-10-29_07:03:39'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-dw8eq0vv/@apt-snapshot-2015-10-30_03:49:05'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-vgo2yuf2/@apt-snapshot-2015-10-30_17:53:59'

Как видите, доступные снимки были удалены. Однако самый старый снимок «old-root» не был удален и все еще может использоваться для отката, даже если он намного старше 0 дней.

Запустите следующую команду для получения полного списка функций:

apt-btrfs-snapshot --help
mchid
источник
Я только что попробовал это, и sudo apt-btrfs-snapshot delete-older-than 30dприступил к удалению ВСЕХ снимков ...
Кактус
@Cactus, если все ваши снимки старше 30 дней, вот что должно произойти. Чтобы проверить это, прежде чем начать, вы можете запустить: sudo apt-btrfs-snapshot list-older-than 30dчтобы увидеть, что старше 30 дней.
2015 г.
@Cactus, однако, oldroot не должен удалять и все еще может использоваться как точка восстановления.
2015 г.
Обратите внимание, что apt-btrfs-snapshotэто не встроено в каждый дистрибутив. В частности, он не доступен в репозиториях Debian.
user44400