Apa yang harus saya lakukan jika terjadi kesalahan?

18

Saya baru saja mencoba memindahkan pohon besar dari satu disk ke disk lain, yang terlalu kecil. Sekarang, saya pergi dengan sesuatu yang saya tidak bisa benar-benar mengerti - sepertinya beberapa file memang dipindahkan dari pohon sumber sementara yang lain hanya disalin. Ini kemungkinan besar tidak benar, dan saya hanya mengabaikan sesuatu, seperti yang saya lakukan ketika saya memeriksa tempat kosong pada disk target. : D

Perintahnya sederhana mv source-dir destination-dir, di mana kedua dir berada di disk yang berbeda. Saya menggunakan mv (GNU coreutils) 7.4. Tidak ada di halaman manual saya menemukan jawaban untuk pertanyaan-pertanyaan berikut:

  • mungkin file terpotong dibuat?
  • jika ada kesalahan, akankah ada sesuatu di pohon sumber dihapus?
  • bagaimana cara memulihkan (dengan cara yang mudah dan cepat)?
maaartinus
sumber

Jawaban:

8

Saya pikir intro ke infohalaman menjawab semua pertanyaan Anda:

Pertama-tama menggunakan beberapa kode yang sama yang digunakan oleh `cp -a 'untuk menyalin direktori dan file yang diminta, kemudian (dengan asumsi salinan berhasil) ia menghapus yang asli. Jika salinan gagal, maka bagian yang disalin ke partisi tujuan dihapus. Jika Anda menyalin tiga direktori dari satu partisi ke yang lain dan salinan direktori pertama berhasil, tetapi yang kedua tidak, yang pertama akan dibiarkan di partisi tujuan dan yang kedua dan ketiga akan dibiarkan di partisi asli.

Pemulihan seharusnya tidak menjadi masalah, karena data disimpan. Saya tidak tahu berapa banyak mencoba menjadi atom ( mkdirmisalnya adalah; inspeksi sumber diperlukan) atau jika itu ada di domainnya sama sekali (vs kernel), tetapi mungkin ada korupsi jika gangguan terjadi ketika sudah menghapus sumber. Pada titik itu Anda sudah memiliki salinan yang baik di direktori target, sehingga pemeriksaan ukuran byte sederhana dapat melakukan triknya.

EDIT: Saya melakukan beberapa pengujian dengan file besar (beberapa G) dibuat dengan dd, tetapi tanpa hasil konklusif. Tidak pernah berhasil mendapatkan hanya beberapa sumber yang disalin - Saya juga membatalkan seluruh operasi (terlalu cepat) atau setelah itu tidak mendapatkan kesempatan sama sekali karena caching disk dan mungkin desain sistem file yang baik (my ^ C selalu mendarat setelah perpindahan berhasil ).

lynxlynxlynx
sumber
1
Mengenai halaman info, apakah saya mengerti benar bahwa untuk setiap direktori sumber baris perintah , itu akan dihapus jika salinan yang sesuai berhasil? Maksud saya yang mv src1 src2 dstbekerja dalam hal ini mirip dengan mv src1 dst; mv src2 dstdan masing-masing mv src dstadalah seperti cp -a src dst && rm -rf src?
maaartinus
1
Begitulah cara saya memahaminya (hanya mv Anda yang akan menjadi mv && mv). Karena cp -asudah rekursif, saya ragu itu berlaku untuk file dan direktori individual yang ditemukan saat melintasi pohon. Akan melakukan beberapa tes nanti.
lynxlynxlynx
12

Ketika mv pindah ke sistem file yang berbeda, mv pertama-tama akan menyalin semua data ke sistem file yang baru. Setelah data baru disalin, itu menghapus data lama. Ini berarti bahwa jika langkah terputus gagal, lokasi sumber harus tetap berisi semua data.

Sejauh memulihkan, hanya data tujuan yang boleh rusak. Alih-alih menggunakan mv untuk lagi, cukup gunakan rsync dan kemudian rm secara manual

rsync -av source-dir/ dest-dir/
rm -rf source-dir
jordanm
sumber