Làm cách nào để sửa btrfs? [đóng cửa]


9

Tôi đã truy tìm danh sách gửi thư và cuối cùng đã hoàn thành trên trang của Ubuntubtrfs và tôi cảm thấy btrfs vẫn chưa có tiện ích sửa lỗi đầy đủ (như được chỉ ra trên trang chủ của họ ). Mặc dù nhiều tháng trước, nó đã được dự kiến ​​là mặc định cho Linux của Oracle và được bao gồm trong nhiều bản phát hành.

Vì vậy, thay vì điều đó, có một hướng dẫn xử lý sự cố ở đâu đó về cách khắc phục btrfs?

Không, điều đó sẽ sao chép các bản sao lưu của tôi lên trên đầu trang FS của tôi để sửa chữa mọi thứ? (Trong khi xóa ảnh chụp nhanh nếu cần thiết cho không gian? Hoặc để xóa tham nhũng?) Thay vào đó, tôi có nên cố gắng hoàn nguyên về ảnh chụp nhanh trước đó và sau đó khôi phục các tệp bị thiếu từ bản sao lưu không? Hoặc khôi phục các tệp bị thiếu từ ảnh chụp nhanh @ và @home của tôi?

Lưu ý : Đây là một câu hỏi chung. Tôi đã cố tình bỏ qua các vấn đề chính xác của FS (hiện tại); Tôi muốn tìm một hướng dẫn xử lý sự cố chung và chính tắc.

(Ok, ok - đây là một số nhiều chi tiết;)) :

Tôi tắt nguồn trong thời gian tắt máy và do đó không ổn định hệ thống. Hệ thống sẽ khởi động và chạy trong một khoảng thời gian cho đến khi nó ghi đủ dữ liệu và đóng băng. Lần trước tôi vừa mở Thunderbird. Những điều này đòi hỏi phải đặt lại nhiều hơn và có lẽ tham nhũng nhiều hơn. sudo btrfsck /dev/sda1dao động giữa một vài lỗi - thường là lần đầu tiên của biểu mẫu

root 338 inode 7861227 errors 1000
root 338 inode 7904568 errors 1000
root 338 inode 7955174 errors 400
found 46242054144 bytes used err is 1
total csum bytes: 43112400
total tree bytes: 2074640384
total fs tree bytes: 1889853440
btree space waste bytes: 547680627
file data blocks allocated: 110756974592
 referenced 68393684992
Btrfs Btrfs v0.19

oooo, bây giờ nó thực sự rất ngon (tôi chỉ mong được thấy parent transid verify failedở đây ...)

parent transid verify failed on 14266105856 wanted 464223 found 464221
parent transid verify failed on 14266105856 wanted 464223 found 464221
Extent back ref already exists for 14261530624 parent 0 root 256 
leaf parent key incorrect 14261751808
bad block 14261751808
Extent back ref already exists for 66455355392 parent 0 root 2 
Extent back ref already exists for 66455257088 parent 0 root 2 
Extent back ref already exists for 14257274880 parent 0 root 2 
block 14262571008 rec extent_item_refs 2, passed 2
block 14262575104 rec extent_item_refs 1, passed 1
block 14262579200 rec extent_item_refs 1, passed 1
Extent back ref already exists for 14262579200 parent 0 root 257 
leaf 14263906304 items 50 free space 132 generation 464224 owner 2
fs uuid 7d049403-cf6e-4b52-a624-32051e1f5b2a
chunk uuid be6f8f93-320c-4465-85d6-f53907698c32
item 0 key (14263341056 EXTENT_ITEM 4096) itemoff 3944 itemsize 51
    extent refs 1 gen 464168 flags 2
    tree block key (8332576 1 0) level 0
    tree block backref root 257
item 1 key (14263345152 EXTENT_ITEM 4096) itemoff 3893 itemsize 51
    extent refs 1 gen 464168 flags 2
    tree block key (8332586 c 8332543) level 0
    tree block backref root 257
failed to find block number 14263525376

(Tất cả được tóm tắt rất nhiều tất nhiên; Tôi không bao giờ muốn áp đảo bạn với những chi tiết này :))

Và bây giờ cuộc hành quyết cuối cùng của tôi để lại cho tôi sự quen thuộc:

parent transid verify failed on 14265458688 wanted 464230 found 464221
parent transid verify failed on 14265458688 wanted 464230 found 464221
parent transid verify failed on 14265458688 wanted 464230 found 464223
btrfsck: root-tree.c:46: btrfs_find_last_root: Assertion `!(path->slots[0] == 0)' failed.

, bao gồm các lỗi ngẫu nhiên tùy chọn ở cuối. Ôi niềm vui hạnh phúc. Lưu ý rằng những verify failedthay đổi này khi dữ liệu được ghi vào ổ đĩa.

Một lỗi ngẫu nhiên khác:

btrfsck: disk-io.c:412: find_and_setup_root: Assertion `!(!root->node)' failed.

2
Điều này dường như quá mở. Gửi vấn đề thực tế của bạn. Obfuscating nó giúp không ai.
Chris Xuống

Tôi quyết định dùng thử gần đây và sử dụng nó trên root cho một hệ thống mới. Macine đã thiết lập lại cứng (không hỏi) và nó không bao giờ trở lại đầy đủ nữa. Đó là khi tôi phát hiện ra rằng fsck cho btrfs chưa hoàn tất! wow, tôi không thể tin rằng đó là một tùy chọn cho một hệ thống tập tin gốc, tuyệt vời như nó có thể khác
barrymac

Tôi đã sử dụng thành công của tôi khoảng 7 tháng nay. Tôi đã hình dung rằng nó đã tiến gần đến việc có một fsck thích hợp vào thời điểm tôi thực sự gặp phải vấn đề này (điều không thể tránh khỏi khi tôi "thử nghiệm" ...)
Stephen

1
Thôi nào. Nó quá xa để đánh đồng "các vấn đề" với một số hoạt động (trong linux, btrfs, hoặc hành động bên ngoài a-la power cut) dẫn đến tham nhũng? Vấn đề có ý nghĩa nào khác mà người dùng không may gặp phải khi làm việc với một hệ thống tệp? Có, không phải là sự lựa chọn tốt nhất 100% từ, nhưng đảm bảo một nhận xét với từ "không có" nó không. Chỉ cần nhớ rằng linux đang trở nên chính thống hơn (như btrfs), và sẽ có những người mới xung quanh (mà tôi thì không). Vì vậy, hãy đi với "@ChrisDown Vì vậy, tôi đoán rằng không có bất kỳ hướng dẫn xử lý sự cố hợp lý nào cho btrfs"
Stephen

1
Nếu bạn muốn có một hướng dẫn xử lý sự cố, đó là những gì bạn nên yêu cầu (điều đó không mơ hồ). Hỏi hướng dẫn dựa trên việc người dùng không may sẽ sử dụng từ ngữ như vậy có vẻ như là một cách tồi tệ để đặt câu hỏi ...
Chris Down

Câu trả lời:


6

Để giúp trả lời:

cha mẹ transid xác minh thất bại vào 14265458688 muốn 464230 tìm thấy 464221

Có thể được sửa với:

$ btrfs-zero-log DEVICE

LƯU Ý: dữ liệu có thể bị mất! Trước tiên hãy thử và gắn kết với:

$ mount -t btrfs -o recovery,nospace_cache,clear_cache DEVICE MOUNTPOINT

Nếu không thể gắn dữ liệu như nó nói "fs xấu":

$ btrfs restore DEVICE DIRECTORY_TO_DUMP_DATA_TO

Đây là một email thực tế, mặc dù khó theo dõi, tôi đã gửi để làm rõ giải pháp của mình. Hy vọng bạn có thể đưa ra lời giải thích khó hiểu này:

trích đoạn email

Re: Câu hỏi: Làm thế nào tôi có thể phục hồi phân vùng này? (không thể tìm thấy logic $ hugenum len 4096)

Hugo Mills carfax.org.uk> viết:

Vào Thứ Hai, ngày 26 tháng 8 năm 2013 lúc 01:10:54 PM -0600, Chris Murphy đã viết:

Vào ngày 26 tháng 8 năm 2013, lúc 11:41 sáng, Nick Lee nickle.es> đã viết:

Có một cuộc thảo luận về IRC vài ngày trước rằng vấn đề với bloco của gốc cây có thể là kết quả của một vấn đề với chính đĩa, hoặc ánh xạ cây / bản đồ logic. Tôi đã chạy chunk recovery, xem qua các lỗi nó tìm thấy và nhấn write. (Nếu thất bại, tôi sẽ chạy một cái gì đó photorec, mất tổ chức như một tác dụng phụ.)

Tôi có thể viết một cái gì đó rõ ràng hơn sau khi chuyến bay của tôi hạ cánh vào ngày mai nếu bạn muốn.

Tôi chỉ tò mò về việc khi nào nên sử dụng các kỹ thuật khác nhau: -o recovery, btrfsck, chunk-recovery, zero log.

Giả sử rằng bạn không gặp lỗi thiết bị vật lý (đó là một bộ công cụ khác - gắn kết bị mất, btrfs dev del mất tích).

Điều đầu tiên cần làm là lấy một btrfs-image -c9 -t4 của hệ thống tập tin và giữ một bản sao của đầu ra để hiển thị josef. :)

Sau đó bắt đầu với -orecovery và -oro, recovery cho hầu hết mọi thứ.

Nếu chúng không thành công, hãy tìm trong dmesg các lỗi liên quan đến cây nhật ký - nếu nó bị hỏng và không thể đọc được (hoặc gây ra sự cố), hãy sử dụng btrfs-zero-log.

Nếu có vấn đề với cây chunk - người duy nhất tôi thấy gần đây đã báo cáo một cái gì đó như "không thể ánh xạ địa chỉ" - thì có thể sử dụng chunk-recovery.

Sau đó, btrfsck có lẽ là điều tiếp theo để thử. Nếu các tùy chọn -s1, -s2, -s3 có bất kỳ thành công nào, thì btrfs-select-super sẽ giúp bằng cách thay thế siêu khối bằng một siêu hoạt động. Nếu điều đó sẽ không hữu ích, hãy quay lại btrfsck --repair.

Cuối cùng, btrfsck --repair --init-scope-tree có thể cần thiết nếu có một cây phạm vi bị hư hại. Cuối cùng, nếu bạn đã tham nhũng trong tổng kiểm tra, thì có --init-csum-tree.

Hugo.


Ngoài ra các sự cố transid xảy ra khi có GIAO DỊCH (ghi hoặc xóa) xảy ra khi thiết bị tắt đột ngột. Nó sẽ mong đợi một giá trị nhất định khi khởi động nhưng nếu GIAO DỊCH đó không được ghi vào đĩa (nhưng chỉ để ghi nhật ký, đôi khi cũng có trên đĩa) thì những lỗi này sẽ xảy ra. Lưu ý rằng 464230 dự kiến ​​như thế nào nhưng đã có một giao dịch cũ hơn 464221 như 9 giao dịch trước đây .. 9 là rất nhiều vì vậy bạn có thể bị mất dữ liệu (hoặc nếu xóa là trasnsation có thể có nhiều dữ liệu hơn). .
kossboss

Tôi phải thưởng cho việc cung cấp câu trả lời, mặc dù tôi không biết nó có hợp lệ hay không - tôi đã rời khỏi btrfs, vì tôi có nhu cầu đơn giản (độ tin cậy và cần có thể nhồi nhét càng nhiều phương tiện vào đĩa càng tốt)
Stephen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.