Tidak dapat menghapus snapshot btrfs

8

Saya tidak dapat menghapus "btrfs snapshot apt-snapshot-release-upgrade-2013-10-19_00: 52: 26". Berikut detailnya:

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' 

Namun saya dapat menghapus snapshot yang dibuat oleh saya:

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: Tidak ada yang dicatat di log kernel:

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:~#

Tapi strace memberi petunjuk:

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: Saya sudah memasang volume ...

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: Solusi

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

Bantuan apa pun akan dihargai.

Mircea Vutcovici
sumber
Bisakah Anda menghapusnya dari sesi Langsung? Mungkin masih digunakan. grepping /proc/self/mountinfotidak cukup, misalnya dapat digunakan sebagai bind mount atau jika tidak dilepas umount -l(lazy unmount) dan saya tidak tahu apakah mungkin ada kasus lain.
ignis
Itu tidak dipasang sama sekali. Sistem ini adalah server rumah saya. Dan saya pikir foto itu diambil setelah Ubuntu ditingkatkan. Saya sekarang menjalankan Ubuntu 13.10 64bit
Mircea Vutcovici
Apa yang Anda maksud dengan "Sesi Langsung"?
Mircea Vutcovici
Maksud saya Live DVD atau Live USB.
ignis
Silakan posting output dmesg | tailsetelah itu btrfs subvolume deletegagal.
ignis

Jawaban:

15

Snapshot ada di root sebenarnya dari sistem file, yang bukan apa yang telah Anda mount di /. Anda memiliki / @ subvolume yang sudah terpasang di /, jadi tidak ada file dengan nama itu. Anda harus memasang volume root sebenarnya di suatu tempat dan menggunakan jalur itu untuk referensi snapshot.

Atau Anda bisa menggunakannya apt-btrfs-snapshot delete.

psusi
sumber
2
Saya memiliki begitu banyak masalah pemasangan dan penghapusan di masa lalu tetapi tidak pernah mengalami kesulitan menjalankanapt-btrfs-snapshot delete
mchid
Tidak seperti manajemen snapshot btrf normal, apt-btrfs-snapshot harus dijalankan dari sistem yang sedang berjalan dan bukan partisi yang dipasang.
mchid
3
@ mchid, apa? Manajemen snapshot btrf normal dijalankan dari sistem yang sedang berjalan ... apt-btrfs-snapshot hanyalah skrip apt yang secara otomatis menjalankan snapshot btrf normal setiap kali Anda memiliki instalan menginstal / meningkatkan / menghapus paket.
psusi
Masalah saya adalah bahwa saya berada dalam situasi disk penuh karena snapshot, maka saya tidak dapat menginstal apt-btrfs-snapshot.
fccoelho
Anda harus boot dari USB untuk menghapus hal-hal ketika Anda kehabisan ruang. Juga, saya kira Anda dapat menghapus dari sistem yang sedang berjalan jika Anda memasang volume ke / mnt .
mchid