Hata durumunda mv ne yapar?


18

Büyük bir ağacı bir diskten diğerine taşımaya çalıştım, bu da çok küçüktü. Şimdi, gerçekten anlayamadığım bir şey bıraktım - bazı dosyalar gerçekten kopyalanırken bazı dosyalar kaynak ağacından uzaklaştırılmış gibi görünüyor. Bu büyük olasılıkla doğru değil ve sadece hedef diskteki boş yeri kontrol ettiğim gibi bir şeye bakmıyorum. : D

Komut basitçe mv source-dir destination-dir, her iki dir farklı disklerde ikamet edildi. Kullanıyorum mv (GNU coreutils) 7.4. Man sayfasının hiçbir yerinde aşağıdaki soruların cevaplarını bulamadım:

  • kesik dosyalar oluşturulabilir mi?
  • hata durumunda, kaynak ağaçtaki herhangi bir şey silinir mi?
  • nasıl (kolay ve hızlı bir şekilde) kurtarmak için?

Yanıtlar:


8

Sanırım infosayfaya giriş tüm sorularınızı cevaplıyor:

İlk olarak, istenen dizinleri ve dosyaları kopyalamak için `` cp -a '' tarafından kullanılan kodun bir kısmını kullanır, ardından (kopyanın başarılı olduğu varsayılarak) orijinalleri kaldırır. Kopyalama başarısız olursa, hedef bölüme kopyalanan parça kaldırılır. Üç dizini bir bölümden diğerine kopyalayacaksanız ve ilk dizinin kopyası başarılı olduysa, ancak ikincisi başarılı olamadıysa, ilk dizin hedef bölümde bırakılır ve ikinci ve üçüncü dizin orijinal bölümde kalır.

Veriler korunduğu için kurtarma sorunu olmamalıdır. Ne kadar atomik olmaya çalıştığını bilmiyorum ( mkdirörneğin; kaynak denetimi gerekli) veya etki alanındaysa (çekirdeğe karşı), ancak zaten silerken kesinti olursa bozulma olabilir kaynak. Bu noktada, hedef dizinde zaten iyi bir kopyaya sahip olursunuz, bu nedenle basit bir bayt boyutu denetimi hile yapabilir.

EDIT: Ben büyük dosyaları (birkaç G) ile oluşturulan dd, ancak kesin sonuçları ile bazı testler yaptım . Asla kopyalanan kaynaklardan sadece birkaçını almayı başaramadım - ya tüm işlemi iptal ettim (çok hızlı) ya da daha sonra disk önbelleğe alma ve belki de iyi dosya sistemi tasarımı nedeniyle hiç şansım olmadı. ).


1
Bilgi sayfası ile ilgili olarak, her komut satırı kaynak dizini için, ilgili kopya başarılı olduğunda kaldırıldığını doğru anladım mı? Demek istediğim mv src1 src2 dstbu açıdan benzer mv src1 dst; mv src2 dstve her mv src dstbiri benzer cp -a src dst && rm -rf srcmi?
maaartinus

1
Ben de böyle anlıyorum (sadece mvs'niz mv && mv olurdu). Yana cp -azaten özyinelemelidir, bunu ağaç geçme sırasında bulunan bireysel dosyalar ve dizinlere uygulanır şüpheliyim. Daha sonra bazı testler yapacağım.
lynxlynxlynx

12

MV farklı bir dosya sistemine geçerken, önce tüm verileri yeni dosya sistemine kopyalar. Yeni veriler kopyalandıktan sonra eski verileri kaldırır. Bu, taşıma başarısız olursa, kaynak konumun yine de tüm verileri içermesi gerektiği anlamına gelir.

Kurtarmaya gelince, sadece hedef veriler bozuk olmalıdır. Tekrar mv kullanmak yerine rsync kullanın ve sonra rm'yi manuel olarak kullanın

rsync -av source-dir/ dest-dir/
rm -rf source-dir
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.