Baiklah, saya mengetahuinya dengan bantuan tautan Trello ini. Jika ada orang lain yang ingin melakukan ini, inilah prosedurnya.
Prosedur
Dari larik RAID1 yang terdiri dari dua disk, satu /dev/sda
yang salah dan /dev/sdc
lainnya terkenal-baik:
- Nonaktifkan pemasangan otomatis larik ini di
/etc/fstab
, mulai ulang . Pada dasarnya, kami ingin btrfs melupakan keberadaan larik ini, karena ada bug di mana ia masih akan mencoba menggunakan salah satu drive jika 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 ke bawah (Anda harus memverifikasi ini di dmesg) dan menjadi tidak dapat diakses oleh kernel.Atau :cukup keluarkan drive dari komputer sebelum booting! Saya memilih untuk tidak memilih metode ini, karena cara di atas berfungsi dengan baik untuk saya.
- Pasang larik Anda, dengan
-o degraded
modus. - Mulai operasi penyeimbangan ulang dengan
sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint
. Ini akan mengatur ulang luasan pada drive yang dikenal baik, mengonversinya menjadisingle
(non-RAID). Ini akan memakan waktu hampir satu hari untuk diselesaikan, bergantung pada kecepatan drive dan ukuran susunan Anda. (milik saya memiliki ~700 GiB, dan diseimbangkan kembali dengan kecepatan 1 potongan 1GiB per menit) Untungnya, operasi ini dapat dijeda, dan akan membuat larik tetap online saat sedang berlangsung. - Setelah selesai, Anda dapat menerbitkan
sudo btrfs device remove missing /mountpoint
untuk menghapus perangkat rusak yang 'hilang'. - Mulai penyeimbangan ulang kedua dengan
sudo btrfs balance start -mconvert=dup /mountpoint
untuk memulihkan redundansi metadata. Ini memakan waktu beberapa menit di sistem saya. - Anda selesai! Larik Anda sekarang adalah
single
mode, dengan semua redundansi dihapus. - Bawa drive Anda yang rusak ke luar, dan pukul dengan palu.
Pemecahan masalah
- Tolong, btrfs mencoba menulis ke disk saya yang rusak, mengalami kesalahan, dan memaksanya hanya untuk dibaca!
- Apakah Anda mengikuti langkah 1, dan memulai ulang sebelum melanjutkan? Kemungkinan btrfs masih menganggap drive yang Anda putar ada. Mem-boot ulang akan menyebabkan btrfs melupakan kesalahan apa pun, dan membiarkan Anda melanjutkan.
Terima kasih atas kiriman Anda. Saya memiliki ide bahwa saya dapat menguji serangan, mengeluarkan drive dari ruang hotswap saya, menggunakan drive lain dan kemudian memasukkan kembali drive serangan. Dalam retrospeksi, ini adalah ide yang buruk dan sekarang saya membutuhkan ruang hotswap saya.
Inilah yang saya temukan. Sebagai root:
# sudo btrfs fi show
Label: 'disk' uuid: 12817aeb-d303-4815-8bba-a3440e36c62c
Total devices 2 FS bytes used 803.10GiB
devid 1 size 931.51GiB used 805.03GiB path /dev/sda1
devid 2 size 931.51GiB used 805.03GiB path /dev/sdb1
Perhatikan devi yang terdaftar untuk setiap drive. Man for brtrfs balance mengarahkan saya ke opsi devid, mengambil beberapa percobaan untuk mencari tahu cara kerja filter (awalnya mencoba devid=/dev/sdb1). Jadi upaya pertama Anda akan terlihat seperti ini.
# btrfs balance start -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Yang memberi saya kesalahan.
ERROR: error during balancing '/media/.media': Invalid argument
There may be more info in syslog - try dmesg | tail
Inilah kesalahan dari dmesg:
BTRFS error (device sdb1): balance will reduce metadata integrity, use force if you want this
Jadi ini final yang berhasil:
# btrfs balance start -f -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Semoga ini membantu orang lain.