Sejumlah kecil cerita latar:
Saya memiliki sistem file media kecil, tempat saya menyimpan berbagai film dan acara TV yang digunakan untuk pengaturan HTPC saya. Ini pada awalnya diatur, menggunakan btrfs
, pada drive eksternal 1TB WD.
Kemudian, saya memutuskan untuk membeli drive lain, untuk memberikan kemampuan mirroring RAID1 filesystem ini. Drive ini adalah Seagate Barracuda (2TB, BARRACUDA 7200.14 FAMILY). Sayangnya, ini bukan pilihan drive yang baik. Drive mulai mengembangkan sejumlah besar kesalahan baca segera, meskipun BTRFS mampu memperbaikinya.
Baru-baru ini, jumlah kesalahan baca dari drive ini telah meningkat, dengan kondisinya terus memburuk. BTRFS sekarang mulai macet:
kernel: RSP: 0018:ffff88005f0e7cc0 EFLAGS: 00010282
kernel: RIP: 0010:[<ffffffffa0081736>] [<ffffffffa0081736>] btrfs_check_repairable+0xf6/0x100 [btrfs]
kernel: task: ffff88001b5c4740 ti: ffff88005f0e4000 task.ti: ffff88005f0e4000
kernel: Workqueue: btrfs-endio btrfs_endio_helper [btrfs]
kernel: CPU: 1 PID: 3136 Comm: kworker/u8:3 Tainted: G O 4.5.3-1-ARCH #1
kernel: invalid opcode: 0000 [#1] PREEMPT SMP
kernel: kernel BUG at fs/btrfs/extent_io.c:2309!
kernel: ------------[ cut here ]------------
kernel: BTRFS info (device sdc1): csum failed ino 73072 extent 1531717287936 csum 3335082470 wanted 3200325796 mirror 0
kernel: ata3: EH complete
kernel: BTRFS error (device sdc1): bdev /dev/sda3 errs: wr 0, rd 18, flush 0, corrupt 0, gen 0
kernel: blk_update_request: I/O error, dev sda, sector 2991635296
Saya ingin menghapus drive yang rusak dari array RAID1, kembali ke redundansi pada satu drive. Sayangnya, sepertinya tidak ada dokumentasi tentang bagaimana melakukan ini.
Saya menyadari bahwa seseorang dapat menjalankan yang berikut:
sudo btrfs balance start -dconvert=single /media
untuk mengubah profil data ke single
mode, tapi saya tidak yakin hanya DI MANA data akan ditempatkan. Karena salah satu drive gagal, saya ingin dapat memastikan bahwa BTRFS tidak patuh menghapus semua data pada drive yang baik, dan menempatkan satu salinan pada drive yang buruk - sebagai gantinya, saya ingin hanya bertindak seolah-olah drive lain tidak pernah ada (seperti di, konversikan kembali ke pengaturan lama saya)
Ini tidak berfungsi:
$ sudo btrfs device delete /dev/sda3 /media
ERROR: error removing device '/dev/sda3': unable to go below two devices on raid1
Apa yang harus saya lakukan? Bantuan akan sangat dihargai.
TL; DR: dimulai dengan 1 drive di BTRFS single
, menambahkan drive lain, membuatnya RAID1
, drive lain sekarang sedang error, bagaimana cara kembali ke hanya satu drive (KHUSUS yang dikenal baik) dengan single
?
dconvert=single
untuk satu potong hanya melakukan apa yang saya takutkan dan menghapus salinan yang dikenal baik. :(Jawaban:
Baiklah, saya menemukannya dengan bantuan tautan Trello ini . Jika ada yang ingin melakukan ini, inilah prosedurnya.
Prosedur
Dari array RAID1 dari dua disk,
/dev/sda
yang salah dan/dev/sdc
baik-dikenal:/etc/fstab
, reboot . Pada dasarnya, kami ingin btrf lupa bahwa array ini ada, karena ada bug di mana ia masih akan mencoba menggunakan salah satu drive jika itu dicabut.Sekarang setelah array Anda dilepas, jalankan:
echo 1 | sudo tee /sys/block/sda/device/delete
mengganti
sda
dengan nama perangkat yang salah. Ini menyebabkan disk berputar (Anda harus memverifikasi ini dalam dmesg) dan menjadi tidak dapat diakses oleh kernel.Atau : keluarkan saja drive dari komputer sebelum melakukan boot! Saya memilih untuk tidak memilih metode ini, karena cara di atas berfungsi dengan baik untuk saya.
-o degraded
mode.sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint
. Ini akan mengatur ulang luasan pada drive yang dikenal baik, mengubahnya menjadisingle
(non-RAID). Ini akan memakan waktu hampir satu hari untuk diselesaikan, tergantung pada kecepatan drive Anda dan ukuran array Anda. (milik saya ~ 700 GiB, dan menyeimbangkan kembali pada tingkat 1 1GiB per menit) Untungnya, operasi ini dapat dihentikan sementara, dan akan membuat array online saat itu terjadi.sudo btrfs device remove missing /mountpoint
untuk menghapus perangkat yang salah 'hilang'.sudo btrfs balance start -mconvert=dup /mountpoint
mengembalikan redundansi metadata. Ini membutuhkan beberapa menit pada sistem saya.single
mode, dengan semua redundansi dihapus.Penyelesaian masalah
sumber
,soft
setelah setiapconvert=
untuk melewati potongan yang sudah memiliki profil target (yang seharusnya semuanya).Terima kasih atas kiriman Anda. Saya memiliki ide bahwa saya dapat menguji serangan, mengeluarkan drive dari ruang hotswap saya, menggunakan drive lain dan kemudian meluncurkan drive itu kembali. Dalam retrospeksi, ini adalah ide yang buruk dan sekarang saya perlu bay hotswap saya.
Inilah yang saya temukan. Sebagai root:
Perhatikan devid yang terdaftar untuk setiap drive. Man for brtrfs balance membawa saya ke opsi devid, butuh beberapa upaya untuk mencari tahu bagaimana filter bekerja (awalnya mencoba devid = / dev / sdb1). Jadi upaya pertama Anda akan terlihat seperti ini.
Yang memberi saya kesalahan.
Inilah kesalahan dari dmesg:
Jadi ini final yang berhasil:
Semoga ini bisa membantu orang lain keluar.
sumber
btrfs replace
.devid=
, data tunggal yang dihasilkan ditempatkan pada perangkat 1.-sconvert
untuk mengonversi bongkahan sistem.|
bukan,
sebagai halaman manual untuk keseimbangan mengatakan:profiles=<profiles>
Balances only block groups with the given profiles. Parameters are a list of profile names separated by "|" (pipe)