Ein btrfs-Snapshot kann nicht gelöscht werden

8

Ich kann den btrfs-Snapshot "apt-snapshot-release-upgrade-saucy-2013-10-19_00: 52: 26" nicht löschen. Hier sind die Details:

root@cioco:~# btrfs subvolume list -s /
ID 261 gen 246 cgen 245 top level 5 otime 2013-10-19 00:52:26 path @apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
root@cioco:~# btrfs subvolume list  /
ID 256 gen 334584 top level 5 path @
ID 258 gen 334134 top level 5 path @home
ID 261 gen 246 top level 5 path @apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
ID 267 gen 334580 top level 256 path var/lib/lxc/mythtv/rootfs
ID 268 gen 334584 top level 256 path var/lib/lxc/jira/rootfs
ID 278 gen 279278 top level 256 path var/lib/lxc/michele/rootfs
root@cioco:~# grep btrfs /proc/self/mountinfo
20 1 0:16 /@ / rw,relatime - btrfs /dev/sda2 rw,compress=zlib,space_cache
39 20 0:16 /@home /home rw,relatime - btrfs /dev/sda2 rw,compress=zlib,space_cache

root@cioco:~# btrfs subvolume delete /@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
ERROR: error accessing '/@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26' 

Ich kann jedoch einen von mir erstellten Schnappschuss löschen:

root@cioco:~# btrfs subvolume snapshot / root-snap
Create a snapshot of '/' in './root-snap'
root@cioco:~# btrfs subvolume list -s /
ID 261 gen 246 cgen 245 top level 5 otime 2013-10-19 00:52:26 path @apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
ID 309 gen 334592 cgen 334592 top level 256 otime 2014-03-31 02:19:08 path root/root-snap
root@cioco:~# btrfs subvolume delete /root/root-snap
Delete subvolume '/root/root-snap'

EDIT1: Im Kernel-Protokoll ist nichts protokolliert:

root@cioco:~# dmesg -c >/dev/null
root@cioco:~# btrfs subvolume delete /@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
ERROR: error accessing '/@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26'
root@cioco:~# dmesg
root@cioco:~#

Aber strace gibt einen Hinweis:

root@cioco:~# strace btrfs subvolume delete /@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
...
stat("/@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26", 0x7fffe88ebb60) = -1 ENOENT (No such file or directory)
write(2, "ERROR: error accessing '/@apt-sn"..., 82ERROR: error accessing '/@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26'
) = 82

Edit2: Ich habe das Volume gemountet ...

root@cioco:~# mkdir /snapshot
root@cioco:~# mount /dev/sda2 /snapshot -o subvol=/@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
root@cioco:~# grep btrfs /proc/self/mountinfo
20 1 0:16 /@ / rw,relatime - btrfs /dev/sda2 rw,compress=zlib,space_cache
39 20 0:16 /@home /home rw,relatime - btrfs /dev/sda2 rw,compress=zlib,space_cache
61 20 0:16 /@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26 /snapshot rw,relatime - btrfs /dev/sda2 rw,compress=zlib,space_cache
root@cioco:~# btrfs subvolume delete /snapshot/
Delete subvolume '//snapshot'
ERROR: cannot delete '//snapshot' - Invalid argument

root@cioco:~# strace btrfs subvolume delete /snapshot/
...
stat("/snapshot", {st_mode=S_IFDIR|0755, st_size=230, ...}) = 0
brk(0)                                  = 0x2206000
brk(0x2228000)                          = 0x2228000
lstat("/snapshot", {st_mode=S_IFDIR|0755, st_size=230, ...}) = 0
stat("/", {st_mode=S_IFDIR|0755, st_size=242, ...}) = 0
openat(AT_FDCWD, "/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 23), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd8ad2ae000
write(1, "Delete subvolume '//snapshot'\n", 30Delete subvolume '//snapshot'
) = 30
ioctl(3, BTRFS_IOC_SNAP_DESTROY, 0x7fff5f1e5878) = -1 EINVAL (Invalid argument)
close(3)                                = 0
write(2, "ERROR: cannot delete '//snapshot"..., 53ERROR: cannot delete '//snapshot' - Invalid argument
) = 53
...

root@cioco:~# dmesg
[3172764.459166] device label cioco-root devid 1 transid 336213 /dev/sda2

Edit3: Lösung

root@cioco:~# mount /dev/sda2 /btrfs-root/
root@cioco:~# ls -l /btrfs-root/
total 0
drwxr-xr-x 1 root root 262 Apr  1 08:31 @
drwxr-xr-x 1 root root 230 Oct 16 22:53 @apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26
drwxr-xr-x 1 root root   6 Oct 16 22:13 @home
root@cioco:~# btrfs subvolume delete /btrfs-root/@apt-snapshot-release-upgrade-saucy-2013-10-19_00\:52\:26/
Delete subvolume '/btrfs-root/@apt-snapshot-release-upgrade-saucy-2013-10-19_00:52:26'
root@cioco:~# dmesg
[41113.537617] device label cioco-root devid 1 transid 337615 /dev/sda2

Jede Hilfe wäre dankbar.

Mircea Vutcovici
quelle
Können Sie es aus einer Live-Sitzung löschen? Vielleicht wird es noch verwendet. Grepping /proc/self/mountinfoist nicht genug, zum Beispiel kann es als Bind-Mount verwendet werden oder wenn es nicht gemountet wurde umount -l(Lazy Unmount) und ich weiß nicht, ob es andere Fälle geben kann.
Ignis
Es ist überhaupt nicht montiert. Das System ist mein Heimserver. Und ich denke, dass der Schnappschuss nach dem Ubuntu-Upgrade aufgenommen wurde. Ich
laufe
Was meinst du mit "Live Session"?
Mircea Vutcovici
Ich meine Live DVD oder Live USB.
Ignis
Bitte posten Sie die Ausgabe von dmesg | taildanach btrfs subvolume deleteschlägt fehl.
Ignis

Antworten:

15

Der Snapshot befindet sich im realen Stammverzeichnis des Dateisystems, das Sie nicht in / gemountet haben. Sie haben das Subvolume / @ in / gemountet, daher gibt es keine solche Datei mit diesem Namen. Sie müssen das reale Root-Volume irgendwo bereitstellen und diesen Pfad verwenden, um auf den Snapshot zu verweisen.

Oder Sie können apt-btrfs-snapshot deletestattdessen verwenden.

psusi
quelle
2
Ich hatte in der Vergangenheit so viele Probleme beim Mounten und Löschen, hatte aber nie Probleme beim Ausführenapt-btrfs-snapshot delete
mchid
Im Gegensatz zur normalen Verwaltung von btrfs-Snapshots muss apt-btrfs-snapshot von einem laufenden System und nicht von einer bereitgestellten Partition ausgeführt werden.
Mchid
3
@mchid, was? Die normale Verwaltung von btrfs-Snapshots wird von einem laufenden System aus ausgeführt ... apt-btrfs-snapshot ist nur ein apt-Skript, das den normalen btrfs-Snapshot jedes Mal automatisch ausführt, wenn Sie apt-Pakete installieren / aktualisieren / entfernen.
Psusi
Mein Problem ist, dass ich mich aufgrund der Snapshots in einer Situation befinde, in der die Festplatte voll ist. Daher kann ich nicht installieren apt-btrfs-snapshot.
Fccoelho
Sie müssen von einem USB-Stick booten, um Inhalte zu löschen, wenn der Speicherplatz knapp wird. Ich denke auch, dass Sie von einem laufenden System löschen können, wenn Sie das Volume auf / mnt mounten .
Mchid