Hanya data yang baru ditulis (ditambahkan) yang dipisahkan antara semua vdev yang sedang aktif, tidak ada operasi penyeimbangan ulang yang eksplisit di ZFS.
Dua kemungkinan solusi:
- Tunggu hingga semua data lama ditulis kembali (karena Kontrak Karya, ini bisa memakan waktu sangat lama, dalam kasus terburuk dua kali lipat waktu yang diperlukan untuk menulis disk sepenuhnya).
- Hapus semua data dan tulis lagi (zfs send/recv berguna untuk mengeluarkan semua data dari kumpulan dan kembali tanpa kehilangan apa pun). Ini tidak harus dilakukan sekaligus, dan dapat dilakukan di kolam yang sama.
Untuk lebih tepatnya, saya akan memilih solusi kedua dan mentransfer setiap sistem file secara terpisah pada saat beban sistem rendah (misalnya pada malam hari):
- Ambil snapshot (
zfs snapshot -r
) dari sistem file berukuran layak (dan sistem file turunan, secara rekursif) - Gunakan
zfs send | zfs recv
dengan opsi yang sesuai untuk mengirim snapshot ke sistem file sementara yang baru dibuat (dapat berada di kumpulan yang sama jika ruang memungkinkan); sistem file ini harus berada di lokasi yang sama dalam hierarki dengan yang lama - Setelah penyalinan selesai (mungkin membutuhkan waktu, karena disk harus membaca dan menulis),
zfs destroy
snapshot lama dan sistem file lama zfs rename
sistem sementara ke nama lama- Periksa dan ubah titik pemasangan dengan
zfs mount
, mengatur ulang situasi sebelumnya untuk sistem file yang Anda ganti - Ulangi hingga semua sistem file dipindahkan
kemungkinan solusi ke-3 (seperti yang disebutkan oleh SirMaster dalam posting forum FreeNAS ini):
- tambahkan disk baru ke zpool
- salin banyak file ke direktori /mnt/pool/temp/ baru lainnya
- hapus file asli:
rm -rf original/
- ganti nama direktori kembali:
mv temp/ original/
Ini berfungsi karena ZFS akan menempatkan penulisan secara proporsional ke vdev mana pun yang memiliki ruang kosong paling banyak, dalam hal ini drive baru yang kosong. (pada 0,7, zfs akan mendukung drive yang lebih cepat untuk penulisan, tetapi anggaplah 2 drive baru Anda memiliki kinerja yang sama atau lebih baik daripada drive asli)
Ini mungkin lebih lambat dari zfs send | zfs recv
, tetapi lebih sederhana karena Anda tidak perlu membuat/menghancurkan snapshot.
Anda dapat menjalankan zpool list -v
sebelum dan sesudah untuk melihat setiap penggunaan vdev.
Juga, temukan skrip php yang melakukan prosedur salin/hapus/ganti nama berdasarkan file-demi-file. Ini ditautkan dalam jawaban dari pertanyaan serupa (tetapi zvol) beberapa tahun lebih tua. (tidak menguji skrip ini secara pribadi)