zfs kök dosya sistemini alt öğeye yeniden adlandırır / taşır


9

Benzer soru var, ancak çözüm (kullanma mv) korkunç çünkü bu durumda saf "hareket" yerine "kopyala, sonra kaldır" olarak çalışıyor.

Bir havuz oluşturdum:

zpool create tank /dev/loop0

ve verilerimi şimdi orada olmak için doğrudan oradaki başka bir depolama biriminden yeniden senkronize ettim /tank.

zfs list
NAME      USED  AVAIL  REFER  MOUNTPOINT
tank      591G  2.10T   591G  /tank

Şimdi, verilerimin /tankdoğrudan dosya sisteminde değil, alt dosya sisteminde olmasını istediğimi fark ettim .

Peki mevcut kök dosya sistemini havuz içinde alt öğe olacak şekilde nasıl taşıyabilirim veya yeniden adlandırabilirim?

Basit yeniden adlandırma çalışmaz:

zfs rename tank tank/mydata
cannot rename to 'tank/mydata': datasets must be within same pool

(Btw, neden sadece bir havuzum varsa veri kümelerinin aynı havuzda olmadığından şikayet ediyor?)

Tüm verileri kopyalamayı ( mvveya tüm veri kümesini başka bir cihaza ve geri göndermeyi) içeren çözümler olduğunu biliyorum , ancak basit ve zarif bir yol olmamalı mı?

Sadece bu aşamada enstantaneler umurumda değil (henüz ilgilenecek hiçbir şey yok).

Yanıtlar:


4

(yorumlardaki notlara bakın, bu işe yarıyor, ancak anlık görüntüyü ilk olarak asla silemeyeceksiniz, bu yüzden iyi bir çözüm değil)

ZFS ile bu şaşırtıcı derecede basittir: sadece anlık görüntü, klon ve sonra rm. Fazladan boşluk veya kopyalama süresi gerekmez.

zfs snapshot tank@mydata
zfs clone tank@mydata tank/newname
zfs set mountpoint=/beep/boop tank/newname
rm -rf /tank/*

Eğer zpool'unuzda başka dosya sistemleri varsa bağlama noktasını değiştirmezseniz rm -rf komutunu çalıştırırken dikkat edin. Yeni dosya sisteminin (/ tank / newname) veya diğer alt dosya sistemlerinin (tank / *) içeriğini yanlışlıkla tekrar tekrar kaldırmak istemezsiniz. Dosyalarınızın kök fs'de (/ tank /) ve yalnızca yeni dosya sisteminizde olmadığını onayladıktan sonra, ilk anlık görüntüyü de silebilirsiniz.

zfs delete tank@mydata

Makul bir cevap gibi görünüyor (Verileri taşımadan yeni bir veri kümesine almanın başka bir yolunu düşünemiyorum) ama maalesef bu orijinal görüntüyü silemezsiniz. Klonların birkaç garip yan etkisi vardır. Yeni veri kümesi buna bağlı olduğundan tank @ verilerimi silemezsiniz. Tank @ verilerimi tank / yeni ad @ verilerim'e taşıyacak yeni veri kümesini tanıtabilirsiniz, ancak şimdi bağımlılığı değiştirdiniz ve yeni veri kümesini kaldırmaya çalıştığınızda komik 'veri kümesi zaten var' hataları alıyorsunuz (En azından Her ne kadar bu muhtemelen OS yerine ZFS'ye özgü olduğunu varsayalım).
USD

@USDMatt: Tamamen haklısın. Subfileystemlerle (tank / a -> tank / a @ snap -> tank / asnap-clone -> tank / yeniden adlandırılmış-asnap-klon) çalışıyorsanız, ancak zpool. Bir böcek gibi hissettirir, havuzunuzun kök dosya sistemini asla doldurmamak için başka bir neden olarak tebeşirleyin).
notpeter

4

@USDMatt tarafından belgelenen sorun göz önüne alındığında, ZFS gönderme / alma muhtemelen en iyi yoldur.

zfs snapshot tank@snap
zfs send tank@snap | zfs receive tank/anotherfs
zfs set mountpoint=/beep/boop tank/anotherfs
rm -rf /tank/*
zfs destroy tank@snap

Tank zpool'unuzda başka dosya sistemleriniz varsa bağlama noktasını değiştirmezseniz rm -rf komutunu çalıştırırken dikkat edin. Yeni dosya sisteminin (/ tank / newname) veya diğer alt dosya sistemlerinin (/ tank / *) içeriğini yanlışlıkla tekrar tekrar kaldırmak istemezsiniz.


0

Basit ve zarif bir yol olduğunu düşünmüyorum ... montaj noktanızı değiştirebilmenize rağmen ...

mkdir /tank
zfs set mountpoint=/tank/mydata <possibly renamed tank set>

Ya da belki tankı yeniden adlandırın ve sonra ihtiyacınız olan yere monte edin ...

Ya bu ya da doğru yerde bir dosya sistemi oluşturun ve cp, mv veya zfs gönder / al ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.