Cara menghapus subvolume btrfs dengan <FS_TREE> di namanya

9

Saya punya banyak snapshot btrf seperti:

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

Saya ingin menyingkirkan mereka. Jadi saya mencoba

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'

Apa sintaks yang benar untuk menghapus snapshot ini?

Kaktus
sumber

Jawaban:

10

Saya dapat menghapus snapshot ini dengan terlebih dahulu memasang seluruh volume btrfs (bukan @subvolume) dan kemudian bekerja dari sana:

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

Jadi pada titik ini, semua subvolume (termasuk yang funky apt-snapshot) dapat dilihat /mnt, sehingga kami dapat menghapusnya:

# btrfs subvol delete /mnt/@apt-snapshot-2013-04-17_21:44:30
# umount /mnt
Kaktus
sumber
2
Apakah Anda harus menggunakan CD live untuk ini?
mlissner
2
Tidak, saya bisa melakukan ini ketika menjalankan sistem dari sistem @file yang sama.
Cactus
1

Cara termudah untuk melakukan ini adalah dengan menggunakan apt-btrfs-snapshotperintah bawaan:

Tidak seperti penghapusan snapshot normal, Anda tidak perlu memasang sistem file untuk menghapus snapshot.

Pertama, daftarkan apt-btrfs-snapshotsnapshot yang tersedia menggunakan perintah berikut:

sudo apt-btrfs-snapshot list

Berikut adalah contoh output dari perintah itu:

@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

Untuk menghapus snapshot @apt-snapshot-2015-10-30_17:53:59, jalankan:

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

Anda juga dapat menghapus sejumlah foto berdasarkan tanggal. Berikut adalah contoh dari perintah yang akan menghapus semua foto yang lebih lama dari 0 hari.

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

Berikut adalah contoh output dari perintah itu:

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'

Seperti yang Anda lihat, foto-foto yang tersedia telah dihapus. Namun, snapshot tertua "root-tua" tidak dihapus dan masih dapat digunakan untuk memutar kembali meskipun jauh lebih tua dari 0 hari.

Jalankan perintah berikut untuk daftar lengkap fitur:

apt-btrfs-snapshot --help
mchid
sumber
Saya baru saja mencoba ini, dan sudo apt-btrfs-snapshot delete-older-than 30dmelanjutkan untuk menghapus SEMUA foto ...
Cactus
@Cactus jika semua foto Anda lebih dari 30 hari, itulah yang seharusnya terjadi. Untuk memverifikasi ini sebelum Anda mulai, Anda dapat menjalankan: sudo apt-btrfs-snapshot list-older-than 30duntuk melihat apa yang lebih dari 30 hari.
mchid
@Cactus, oldroot tidak boleh dihapus dan masih bisa digunakan sebagai titik pemulihan.
mchid
Perhatikan bahwa apt-btrfs-snapshotini bukan "bawaan" di setiap distribusi. Secara khusus tampaknya tidak tersedia di repositori Debian.
user44400