Saya menemukan jawaban ini secara tidak sengaja, tetapi jika ada orang yang penasaran, inilah jawaban yang didukung oleh eksperimen.
Versi Pendek
Pertanyaan Bonus: dapatkah saya membuat md(4)
array RAID dari perangkat blok dengan ukuran yang tidak sama? Ya, tetapi array RAID akan memiliki ukuran perangkat blok terkecil (ditambah beberapa overhead untuk housekeeping sendiri). Jika ukuran perangkat tidak dalam 1% dari satu sama lain, Anda mendapat peringatan.
Pertanyaan 1: dapatkah saya menambah md(4)
array RAID yang ada perangkat lebih kecil dari anggota terkecil saat ini? Tidak maaf. mdadm
akan menolak untuk melakukan itu untuk melindungi data Anda.
Pertanyaan 2: dapatkah Anda mengubah ukuran array md yang ada? Ya (baca mdadm
manpge!), Tetapi mungkin tidak sepadan dengan usaha. Anda harus mencadangkan semuanya, lalu mengubah ukuran konten perangkat RAID, lalu mengubah ukuran perangkat itu sendiri - semua ini cukup rentan terhadap kesalahan, kesalahan perhitungan, dan hal-hal lain yang akan dikenakan biaya data Anda (pengalaman berbicara yang menyakitkan) .
Itu tidak sepadan dengan risiko dan upaya. Jika Anda memiliki disk kosong baru, berikut ini cara mengubah ukurannya dan juga menyimpan antara satu dan dua salinan semua data Anda setiap saat (dengan asumsi Anda memiliki 2-disk RAID1):
- Buat
md(4)
array baru di atasnya (dengan satu disk hilang).
- Buat kembali struktur isi array (Crypto, LVM, tabel partisi, kombinasi apa saja, apa pun yang mengapung perahu Anda).
- Salin data dari disk yang ada ke yang baru.
- Mulai ulang, menggunakan disk baru.
- Bersihkan tabel partisi disk lama (atau nol
md(4)
superblok). Jika perlu, buat partisi yang diperlukan untuk mencocokkan skema pada disk baru.
- Tambahkan disk lama ke array baru.
- Tunggu anggota array disinkronkan. Minumlah kopi. Terbanglah ke Amerika Latin dan pilih biji kopi Anda sendiri. :) (Jika Anda tinggal di Amerika Latin, sebaliknya terbang ke Afrika).
Catatan: ya, ini adalah teknik yang sama 0xC0000022L yang dijelaskan dalam jawabannya.
Pertanyaan 3. Bagaimana jika drive pendek 1G? :) Jangan khawatir tentang itu. Kemungkinan drive pengganti Anda akan lebih besar. Bahkan, dengan strategi seperti di atas, membayar untuk mendapatkan drive yang lebih besar lebih murah setiap kali gagal (atau untuk upgrade yang lebih murah). Anda bisa mendapatkan peningkatan progresif.
Bukti Eksperimental
Pengaturan eksperimen
Pertama, mari kita palsu beberapa perangkat blokir. Kami akan menggunakan /tmp/sdx
dan /tmp/sdy
(masing-masing 100M), dan /tmp/sdz
(99M).
cd /tmp
dd if=/dev/zero of=sdx bs=1M count=100
sudo losetup -f sdx
dd if=/dev/zero of=sdy bs=1M count=100
sudo losetup -f sdy
dd if=/dev/zero of=sdz bs=1M count=99 # Here's a smaller one!
sudo losetup -f sdz
Ini set up tiga file seperti tiga perangkat blok loopback: /dev/loop0
, /dev/loop1
dan /dev/loop2
, pemetaan untuk sdx
, sdy
dan sdz
masing-masing. Mari kita periksa ukurannya:
sudo grep loop[012] /proc/partitions
7 0 102400 loop0
7 1 102400 loop1
7 2 101376 loop2
Seperti yang diharapkan, kami memiliki dua perangkat loop persis 100M (102400 KiB = 100 MiB) dan satu dari 99M (tepat 99 × 1024 1K blok).
Membuat Array RAID dari Perangkat yang Berukuran identik
Ini dia:
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop1
mdadm: array /dev/md100 started.
Periksa ukuran:
sudo grep md100 /proc/partitions
9 100 102272 md100
Ini adalah precicely apa yang kita harapkan: satu melihat manual mdadm mengingatkan kita bahwa versi 1.2 metadata mengambil 128K: 128 + 102.272 = 102400. Sekarang mari kita menghancurkannya dalam persiapan untuk percobaan kedua.
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1
Membuat Array RAID dari Perangkat Tidak Berukuran
Kali ini kita akan menggunakan perangkat blok kecil.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop2
mdadm: largest drive (/dev/loop0) exceeds size (101248K) by more than 1%
Continue creating array? y
mdadm: array /dev/md100 started.
Yah, kami sudah diperingatkan, tetapi array dibuat. Mari kita periksa ukurannya:
sudo grep md100 /proc/partitions
9 100 101248 md100
Apa yang kita dapatkan di sini adalah 101.248 blok. 101248 + 128 = 101376 = 99 × 1024. Ruang yang dapat digunakan adalah perangkat terkecil (ditambah metadata RAID 128K). Mari kita turunkan semuanya untuk percobaan terakhir kami:
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2
Dan Akhirnya: Menambahkan Perangkat yang lebih kecil ke Lari Lari
Pertama, mari kita buat array RAID1 hanya dengan satu dari 100M disk. Array akan terdegradasi, tetapi kami tidak terlalu peduli. Kami hanya ingin array yang dimulai . Kata missing
kunci adalah placeholder yang mengatakan 'Saya belum memiliki perangkat untuk Anda, mulai dia susun sekarang dan saya akan menambahkannya nanti'.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 missing
Sekali lagi, mari kita periksa ukurannya:
sudo grep md100 /proc/partitions
9 100 102272 md100
Benar saja, 128K kekurangan 102400 blok. Menambahkan disk yang lebih kecil:
sudo mdadm --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array
Ledakan! Itu tidak akan membiarkan kita, dan kesalahannya sangat jelas.