btrfs が破損して mount 出来ず check --repair や rescue しても直らない場合でも、
mount -o recovery で mount 出来る場合がある。
ただし、checksum 破損してる状況だとデータ死んでるかも。
mount -o recovery で mount 出来る場合がある。
ただし、checksum 破損してる状況だとデータ死んでるかも。
VirtualBox に btrfs root で Ubuntu 20.04 LTS を入れてるのだが、
/@/boot/grub 以下にアクセスできないようなので stage 2 が起動出来てない関係か、
grub rescue では history さえも機能しない。
Ubuntu Desktop 22.04.1 LTS の ISO から起動して確認してみると以下のような状況。
btrfs rescue や btrfs check を一通り試してみるが以下のような感じで改善出来ない。
「btrfs checksum verify failed」でググって見つけた
mount 時に -o recovery 付けると mount 可能だった。
せめて、btrfs device add して balance 出来ないかと思い
一旦 VM 落として Utuntu.vdi と同サイズで Ubuntu_1.vdi 追加して、再度 ISO から起動してみたのだが
仕方ないので
結局、
結果
このファイル引き継いでもあまり幸せになれそうにないので、捨てて Ubuntu 22.04.1 LTS 入れ直すことに。
error: file `/@/boot/grub/i386-pc/normal.mod` not found. Entering rescue mode... grub rescue>みたいに表示されて boot 出来ない。
/@/boot/grub 以下にアクセスできないようなので stage 2 が起動出来てない関係か、
grub rescue では history さえも機能しない。
Ubuntu Desktop 22.04.1 LTS の ISO から起動して確認してみると以下のような状況。
$ sudo parted /dev/sda u s p Model: ATA VBOX HARDDISK (scsi) Disk /dev/sda: 41943040s Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2048s 41940991s 41938944s primary btrfs
$ sudo btrfs check /dev/sda1 Opening filesystem to check... checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6748028928, bytenr mismatch, want=6748028928, have=0 ERROR: could not setup csum tree ERROR: cannot open file system
$ sudo mount -t btrfs /dev/sda1 /mnt mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sda1, missing codepage or helper program, or other error.
$ sudo dmesg | tail ... [ 2845.726578] BTRFS info (device sda1): flagging fs with big metadata feature [ 2845.726581] BTRFS info (device sda1): disk space caching is enabled [ 2845.726582] BTRFS info (device sda1): has skinny extents [ 2845.730399] BTRFS error (device sda1): bad tree block start, want 6748028928 have 0 [ 2845.730646] BTRFS warning (device sda1): failed to read root (objectid=7): -5 [ 2845.732122] BTRFS error (device sda1): open_ctree failed
btrfs rescue や btrfs check を一通り試してみるが以下のような感じで改善出来ない。
$ sudo btrfs rescue chunk-recover /dev/sda1 Scanning: DONE in dev0 Check chunks successfully with no orphans Chunk tree recovered successfully
$ sudo btrfs rescue super-recover /dev/sda1 All supers are valid, no need to recover
$ sudo btrfs check --repair /dev/sda1 enabling repair mode WARNING: Do not use --repair unless you are advised to do so by a developer or an experienced user, and then only after having accepted that no fsck can successfully repair all types of filesystem corruption. Eg. some software or hardware bugs can fatally damage a volume. The operation will start in 10 seconds. Use Ctrl-C to stop it. 10 9 8 7 6 5 4 3 2 1 Starting repair. Opening filesystem to check... checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6748028928, bytenr mismatch, want=6748028928, have=0 WARNING: could not setup csum tree, skipping it Checking filesystem on /dev/sda1 UUID: 3d1784f5-18d7-4ef9-956b-728ef061a317 ERROR: chritical: global root [7 0] not uptodate, unable to check the file system
$ sudo btrfs check --repair --init-csum-tree --force /dev/sda1 enabling repair mode Creating a new CRC tree Opening filesystem to check... checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6748028928, bytenr mismatch, want=6748028928, have=0 WARNING: could not setup csum tree, skipping it Checking filesystem on /dev/sda1 UUID: 3d1784f5-18d7-4ef9-956b-728ef061a317 Reinitialize checksum tree checksum verify failed on 6743769088 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6743769088 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6743769088, bytenr mismatch, want=6743769088, have=0 ERROR: checksum tree refilling failed: -5
$ sudo btrfs check --repair --init-extent-tree --force /dev/sda1 enabling repair mode Opening filesystem to check... checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6748028928, bytenr mismatch, want=6748028928, have=0 WARNING: could not setup csum tree, skipping it Checking filesystem on /dev/sda1 UUID: 3d1784f5-18d7-4ef9-956b-728ef061a317 Creating a new extent tree checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6748028928, bytenr mismatch, want=6748028928, have=0 Error reading root block error pinning down used bytes ERROR: commit_root already set when starting transaction extent buffer leak: start 6752075776 len 16384
「btrfs checksum verify failed」でググって見つけた
- SUSE Support / How to recover from BTRFS errors
mount 時に -o recovery 付けると mount 可能だった。
せめて、btrfs device add して balance 出来ないかと思い
一旦 VM 落として Utuntu.vdi と同サイズで Ubuntu_1.vdi 追加して、再度 ISO から起動してみたのだが
# parted /dev/sdb mklabel gpt mkpart btrfs 2048s 41940991s u s p Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 41943040s Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 2048s 41940991s 41938944s btrfs Information: You may need to update /etc/fstab.
# mount -t btrfs -o recovery /dev/sda1 /mnt # btrfs f show Label: none uuid: 3d1784f5-18d7-4ef9-956b-728ef061a317 Total devices 1 FS bytes used 18.26GiB devid 1 size 20.00GiB used 20.00GiB path /dev/sda1
# mount ... /dev/sda1 on /mnt type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)
# btrfs dev add /dev/sdb1 /mnt ERROR: error adding device '/dev/sdb1': Input/output error
# btrfs f show Label: none uuid: 3d1784f5-18d7-4ef9-956b-728ef061a317 Total devices 2 FS bytes used 18.26GiB devid 1 size 20.00GiB used 20.00GiB path /dev/sda1 devid 2 size 20.00GiB used 0.00B path /dev/sdb1
# mount /dev/sda1 on /mnt type btrfs (ro,relatime,ssd,space_cache,subvolid=5,subvol=/)みたいになり I/O error のせいで ro になってしまう。
仕方ないので
- GitHub / satoru-takeuchi / btrfs-thin-book: Btrfsの薄い本 / 逆引きトラブルシューティング # mountできないファイルシステムからファイルを吸い出す
# unmount /mnt
# mkdir /mnt/sdb1
# mkfs.btrfs /dev/sdb1 btrfs-progs v5.16.2 See http://btrfs.wiki.kernel.org for more information. NOTE: several default settings have changed in version 5.15, please make sure this does not affect your deployments: - DUP for metadata (-m dup) - enabled no-holes (-O no-holes) - enabled free-space-tree (-R free-space-tree) Label: (null) UUID: d5af5351-3141-4535-acca-311ba56b212a Node size: 16384 Sector size: 4096 Filesystem size: 20.00GiB Block group profiles: Data: single 8.00MiB Metadata: DUP 256.00MiB System: DUP 8.00MiB SSD detected: yes Zoned device: no Incompat features: extref, skinny-metadata, no-holes Runtime features: free-space-tree Checksum: crc32c Number of devices: 1 Devices: ID SIZE PATH 1 20.00GiB /dev/sdb1
# mount -t btrfs /dev/sdb1 /mnt/sdb1
# btrfs sub cre /mnt/sdb1/@ Create subvolume '/mnt/sdb1/@'
btrfs sub cre /mnt/sdb1/@home Create subvolume '/mnt/sdb1/@home'してから btrfs restore 試してみたが、
# btrfs restore /dev/sda1 /mnt/sdb1 checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6748028928 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6748028928, bytenr mismatch, want=6748028928, have=0 WARNING: could not setup csum tree, skipping it checksum verify failed on 6743703552 wanted 0x00000000 found 0xb6bde3e4 checksum verify failed on 6743703552 wanted 0x00000000 found 0xb6bde3e4 bad tree block 6743703552, bytenr mismatch, want=6743703552, have=0 ERROR: reading subvolume /mnt/sdb1/@ failed: 18446744073709551611みたいな感じで、やはり bad tree block 6743703552 が原因で読めない。
結局、
# mount -t btrfs -o recovery /dev/sda1 /mnt/sda1
# rsync -PSauv --info=progress2 /mnt/sda1/ /mnt/sdb1/みたいにしてみたところ、なんか読める範囲では読んでくれてるみたいなので、とりあえず rsync 終わるまでしばらく放置してみる。
結果
# btrfs fi show Label: none uuid: 3d1784f5-18d7-4ef9-956b-728ef061a317 Total devices 1 FS bytes used 18.26GiB devid 1 size 20.00GiB used 20.00GiB path /dev/sda1 Label: none uuid: d5af5351-3141-4535-acca-311ba56b212a Total devices 1 FS bytes used 16.57GiB devid 1 size 20.00GiB used 18.02GiB path /dev/sdb1
# rsync -PSauv --info=progress2 /mnt/sda1/ /mnt/sdb1/ sending incremental file list 0 0% 0.00kB/s 0:00:00 (xfr#0, to-chk=0/323315) sent 9,121,565 bytes received 45,634 bytes 797,147.74 bytes/sec total size is 48,110,642,009 speedup is 5,248.13
# rsync -PSacv --info=progress2 /mnt/sda1/ /mnt/sdb1/ sending incremental file list 0 0% 0.00kB/s 0:00:00 (xfr#0, ir-chk=1224/1253) @/bin/btrfs-convert 466,464 0% 413.60MB/s 0:00:00 (xfr#1, ir-chk=1220/1253) rsync: [sender] read errors mapping "/mnt/sda1/@/bin/btrfs-convert": Input/output error (5) @/bin/btrfs-find-root WARNING: @/bin/btrfs-convert failed verification -- update discarded (will try again). 900,224 0% 413.64MB/s 0:00:00 (xfr#2, ir-chk=1219/1253) rsync: [sender] read errors mapping "/mnt/sda1/@/bin/btrfs-find-root": Input/output error (5) @/bin/btrfs-image WARNING: @/bin/btrfs-find-root failed verification -- update discarded (will try again). 1,362,592 0% 422.74MB/s 0:00:00 (xfr#3, ir-chk=1218/1253) rsync: [sender] read errors mapping "/mnt/sda1/@/bin/btrfs-image": Input/output error (5) @/bin/bunzip2 1,401,736 0% 326.39MB/s 0:00:00 (xfr#4, ir-chk=1213/1253) rsync: [sender] read errors mapping "/mnt/sda1/@/bin/bunzip2": Input/output error (5) @/bin/bzcat WARNING: @/bin/btrfs-image failed verification -- update discarded (will try again). 1,440,880 0% 335.72MB/s 0:00:00 (xfr#5, ir-chk=1211/1253) rsync: [sender] read errors mapping "/mnt/sda1/@/bin/bzcat": Input/output error (5) @/bin/bzdiff ...みたいな感じで I/O error でコピーできんファイル多数。
このファイル引き継いでもあまり幸せになれそうにないので、捨てて Ubuntu 22.04.1 LTS 入れ直すことに。
タグ
コメントをかく