Pouze nově zapsaná (připojená) data jsou rozdělena mezi všechny aktuálně aktivní vdev, v ZFS neexistuje žádná explicitní operace opětovného vyvážení.
Dvě možná řešení:
- Počkejte, až budou všechna stará data znovu zapsána (kvůli CoW to může trvat velmi dlouho, v nejhorším případě dvojnásobek času, který by zabralo úplné zapsání disku).
- Odstraňte všechna data a zapište je znovu (zfs send/recv je užitečné při získávání všech dat z fondu a zpět, aniž byste cokoli ztratili). To nemusí být provedeno najednou a lze to provést na stejném fondu.
Abych byl přesnější, zvolil bych druhé řešení a v době, kdy je zatížení systému nízké (například v noci), přenesl každý souborový systém zvlášť:
- Pořiďte snímek (
zfs snapshot -r
) slušně velkého souborového systému (a rekurzivně nižších souborových systémů) - Použijte
zfs send | zfs recv
s vhodnými možnostmi pro odeslání snímku do nově vytvořeného dočasného souborového systému (může být ve stejném fondu, pokud to prostor dovolí); tento souborový systém by měl být na stejném místě v hierarchii jako ten starý - Po dokončení kopírování (může to chvíli trvat, protože disky musí číst a zapisovat),
zfs destroy
starý snímek a starý souborový systém zfs rename
dočasný systém na starý název- Zkontrolujte a změňte přípojné body pomocí
zfs mount
, přeuspořádání předchozí situace pro váš nahrazený souborový systém - Opakujte, dokud nebudou přesunuty všechny systémy souborů
možné 3. řešení (jak zmínil SirMaster v tomto příspěvku na fóru FreeNAS):
- přidat nové disky do zpool
- zkopírujte mnoho souborů do jiného nového adresáře /mnt/pool/temp/
- smazat původní soubory:
rm -rf original/
- přejmenujte dir zpět:
mv temp/ original/
Funguje to, protože ZFS proporcionálně umístí zápisy na kterýkoli vdev, který má nejvíce volného místa, v tomto případě na zcela nové disky, které byly prázdné. (od verze 0.7 bude zfs upřednostňovat rychlejší disky pro zápis, ale předpokládejme, že vaše 2 nové disky mají stejný nebo vyšší výkon než původní disky)
Je pravděpodobně pomalejší než zfs send | zfs recv
, ale jednodušší, protože nemusíte vytvářet/ničit snímky.
Můžete spustit zpool list -v
před a po, abyste viděli každé využití vdev.
Také jsem našel skript php, který provádí proceduru kopírování/mazání/přejmenování soubor po souboru. To bylo spojeno v odpovědi na podobný (ale zvol) dotaz o pár let starší. (tento skript jsem osobně netestoval)