Comment supprimer les sous-volumes btrfs avec <FS_TREE> dans leur nom

9

J'ai un tas d'instantanés btrfs comme ceci:

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

Je voudrais m'en débarrasser. J'ai donc essayé

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'

Quelle est la syntaxe correcte pour supprimer ces instantanés?

Cactus
la source

Réponses:

10

J'ai pu supprimer ces instantanés en montant d'abord le volume btrfs entier (pas le @sous- volume ) puis en travaillant à partir de là:

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

Donc, à ce stade, tous les sous-volumes (y compris les plus funky apt-snapshot) sont visibles dans /mnt, nous pouvons donc les supprimer:

# btrfs subvol delete /mnt/@apt-snapshot-2013-04-17_21:44:30
# umount /mnt
Cactus
la source
2
Avez-vous dû utiliser un CD live pour cela?
mlissner
2
Non, j'ai pu le faire en exécutant le système à partir @du même système de fichiers.
Cactus
1

La façon la plus simple de le faire est d'utiliser les apt-btrfs-snapshotcommandes intégrées :

Contrairement à la suppression normale d'instantanés, vous n'avez pas besoin de monter le système de fichiers pour supprimer des instantanés.

D'abord, répertoriez les apt-btrfs-snapshotinstantanés disponibles à l'aide de la commande suivante:

sudo apt-btrfs-snapshot list

Voici un exemple de la sortie de cette commande:

@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

Pour supprimer l'instantané @apt-snapshot-2015-10-30_17:53:59, exécutez:

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

Vous pouvez également supprimer un certain nombre d'instantanés par date. Voici un exemple de commande qui supprimerait tous les instantanés antérieurs à 0 jour.

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

Voici un exemple de la sortie de cette commande:

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'

Comme vous pouvez le voir, les instantanés disponibles ont été supprimés. Cependant, le plus ancien instantané "old-root" n'a pas été supprimé et peut toujours être utilisé pour revenir en arrière même s'il est beaucoup plus ancien que 0 jour.

Exécutez la commande suivante pour une liste complète des fonctionnalités:

apt-btrfs-snapshot --help
mchid
la source
Je viens d'essayer ceci et j'ai sudo apt-btrfs-snapshot delete-older-than 30dsupprimé TOUS les instantanés ...
Cactus
@Cactus si tous vos instantanés datent de plus de 30 jours, c'est ce qui devrait arriver. Pour vérifier cela avant de commencer, vous pouvez exécuter: sudo apt-btrfs-snapshot list-older-than 30dpour voir ce qui est antérieur à 30 jours.
mchid
@Cactus cependant, oldroot ne doit pas être supprimé et peut toujours être utilisé comme point de restauration.
mchid
Notez que ce apt-btrfs-snapshotn'est pas «intégré» dans chaque distribution. En particulier, il ne semble pas être disponible dans les référentiels Debian.
user44400