Как я могу удалить снимок, которые содержат сам по себе другие снимки? Нормальное sudo btrfs subvolume delete
даст ошибку.
Рекурсивное удаление подобъема (снимки - просто подобъемы только для чтения) еще не доступно в btrfs-инструментах. Чтобы удалить верхнего уровня, Вы должны сначала удалить более низкие уровни.
Вы можете получить список подобъемов с эти btrfs subvolume list
команда.-o выбор должен позволить Вам отфильтровать результаты просто тем, Вы заботитесь о, но не стесняетесь экспериментировать. Вы должны тогда быть в состоянии спуститься по списку и удалить все подподобъемы, после которых Вам необходимо удалить подобъем верхнего уровня, и затем Вы сделаны.
К сожалению btrfs subvolume list
ненавидит исправность. Вот опытный сценарий.
Это работает над подобъемом в текущем каталоге, предполагает tmp
, не существует, имеет тревожное небезопасное поведение на "специальных символах" (|
или символы регулярного выражения в родитель каталоги), имеет неоткрытые ошибки и никакие комментарии. Проблемы regex нужно, вероятно, избежать путем перезаписи для использования сопоставления строк удара вместо sed
. Если вывод btrfs subvolume list
изменения в какой-то момент это съест Вас.
#!/bin/sh
# DISCLAIMER: see above
set -e
function my_ls_pwd() {
btrfs sub list -o "$1" | cut -d " " -f 9
}
btrfs sub create tmp
btrfs sub create tmp/tmp
BTRFS_PWD=$(my_ls_pwd tmp | sed -e 's|tmp/tmp$||')
btrfs sub del tmp/tmp
btrfs sub del tmp
# `btrfs sub list` shows full path within the FS;
# we want path relative to the working directory
function my_ls() {
my_ls_pwd $1 | sed -e "s|^$BTRFS_PWD||"
}
# Recursive subvolume delete
function my_deltree() {
my_ls "$1" | while read i; do
my_deltree "$i"
done
btrfs sub del "$1"
}
my_deltree $1