Apa yang terjadi jika mv
perintah Linux terputus? Katakanlah, saya memindahkan seluruh direktori ke tempat lain dan menyela ketika sedang bergerak. Apakah direktori sumber masih belum tersentuh?
Jika Anda memindahkan direktori pada sistem file yang sama, Anda hanya memindahkan entri direktori dari satu lokasi di sistem file ke yang lain. Misalnya, mv /source/dir /target/dir
akan menghapus entri direktori dir
dari /source
dan membuat yang baru masuk /target
. Itu dilakukan oleh satu panggilan sistem atom (yaitu, tidak terputus). Inode yang berisi entri direktori dir
serta konten sebenarnya dari direktori itu sendiri tidak terpengaruh.
Jika Anda memindahkan direktori dari satu sistem file ke sistem file lainnya, semua file pertama kali disalin ke sistem file baru dan kemudian dihapus tautannya dari yang asli. Jadi, jika Anda menyela mv
saat sedang menyalin, Anda mungkin berakhir dengan dua salinan dari beberapa file - di lokasi lama dan di yang baru.
fsck
(yang kemungkinan besar akan berjalan secara otomatis saat reboot, karena disk tidak di-unmount dengan bersih).strace mv /fs1/dir /fs2/
- hal terakhir yang dilakukan mv adalah memanggilunlinkat
semua file sumber sekaligus (tidak satu per satu saat disalin).Implementasi GNU berulang pada argumen pada baris perintah, mencoba untuk mengubah nama terlebih dahulu, dan, jika gagal, secara rekursif menyalin dan kemudian secara rekursif menghapus sumber. Begitu
akan menghapus a sebelum menyalin b , dan tidak akan mulai menghapus apa pun dalam a sebelum salinan tujuan selesai.
Perhatikan bahwa ini hanya berlaku untuk implementasi GNU.
Untuk memperjelas: jika a adalah direktori yang berisi d dan e , dan b adalah file, urutannya adalah
sumber
mv
juga, jadi itu bukan hanya GNU.Anda memindahkan satu direktori, menghentikan gerakan, dan direktori asli akan tetap utuh:
Jika Anda memindahkan banyak direktori, masing-masing direktori akan utuh pada sumber atau tujuan, tergantung pada kapan Anda menyela:
Bagaimana saya mendapat jawaban saya:
Sebagai tes, saya menyalin folder besar ke direktori NFS, terputus, dan jumlah file di folder besar sumber saya tetap sama, dan sebagian konten dibiarkan di direktori NFS. Saya menggunakan "find. -Type f | wc -l" untuk memverifikasi.
Sepertinya jawaban Simon benar.
sumber
Jawaban yang diterima jelas salah tentang pindah di antara sistem file - fakta yang menyelamatkan saya dari banyak masalah beberapa kali. Saat memindahkan direktori yang berisi subdirektori, tidak ada file dalam subdirektori yang akan dihapus sebelum seluruh subdirektori disalin. Ini adalah, btw, arti sebenarnya dari "objek demi objek" - subdirektori ADALAH objek (file) dan dengan demikian integritasnya harus dilestarikan dengan salinan lengkap di tempat tujuan sebelum sesuatu dapat dihapus. Jadi jawaban Simon nampak pada saya sebagai jawaban yang benar.
sumber
Tidak. Mv mengoperasikan objek demi objek, sehingga objek yang sudah diproses akan dihapus dari sumber.
sumber
Jelas tidak. Langkah ini dibuat objek demi objek. Oleh karena itu, objek yang dipindahkan ke tujuan hingga titik interupsi tidak akan ada lagi di sumbernya.
Jika mv dikeluarkan untuk file besar (antara berbeda) dan telah terputus maka sumbernya akan utuh. Pada target Anda akan melihat file yang tidak lengkap hingga titik gangguan.
Namun Anda dapat mengembalikan mv dengan perintah yang sama dan proses akan berlanjut.
sumber
Jika Anda ingin menginterupsi mv karena Anda ingin memutuskan sambungan dari terminal, Anda dapat mengirimkannya ke latar belakang:
sumber