Apa konsekuensi untuk sistem file ext4 ketika saya mengakhiri cp
perintah penyalinan dengan mengetik Ctrl+ Csaat sedang berjalan?
Apakah sistem file rusak? Apakah ruang partisi ditempati oleh file yang disalin tidak lengkap masih dapat digunakan setelah menghapusnya?
Dan, yang paling penting, apakah menghentikan suatu cp
proses adalah hal yang aman untuk dilakukan?
files
filesystems
ext4
file-copy
Seninha
sumber
sumber
Jawaban:
Ini aman untuk dilakukan, tetapi secara alami Anda mungkin belum selesai menyalin.
Ketika
cp
perintah dijalankan, itu membuat syscalls yang memerintahkan kernel untuk membuat salinan file. Syscall adalah fungsi yang dapat dipanggil aplikasi yang meminta layanan dari kernel, seperti membaca atau menulis data ke disk. Proses userspace hanya menunggu syscall selesai. Jika Anda melacak panggilan, itu akan terlihat seperti:Ini mengulangi untuk setiap file yang akan disalin. Tidak ada korupsi akan terjadi karena cara kerja syscalls ini. Ketika syscalls seperti ini dimasukkan, sinyal fatal hanya akan berlaku setelah syscall selesai , tidak ketika sedang berjalan. Karena itu, proses pembunuhan secara paksa hanya akan menyebabkannya berhenti setelah syscall yang saat ini berjalan selesai. Ini berarti bahwa kernel, tempat driver filesystem hidup, bebas untuk menyelesaikan operasi yang perlu diselesaikan untuk menempatkan filesystem ke keadaan waras. I / O semacam ini tidak akan pernah berakhir di tengah operasi, menjadikannya operasi atom.
Menariknya, inilah sebabnya perintah seperti
cp
mungkin tidak segera berakhir ketika mereka terbunuh. Jika Anda menyalin file yang sangat besar dan membunuhnya, bahkan dengan SIGKILL, prosesnya masih akan berjalan sampai syscall saat ini selesai. Dengan file besar, ini mungkin memakan waktu cukup lama, karena prosesnya tidak akan terganggu.sumber
cp
dirinya sendiri. Ini memiliki berbagai fungsi akses file yang secara internal menggunakannya sebagai nilai.cp
SIGKILLing, bahkan ketika berhadapan dengan file besar ... mungkin durasi dari operasi atom yang tidak terputus dari suatu proses terlalu pendek. Apakah penjelasan yang sama berfungsi untuk membunuhdd
dan proses membaca / menulis disk lainnya?dd
, itu tergantung pada apa yangbs
Anda tetapkan untuk itu. Jika hanya 512 (default), maka itu harus berakhir dengan cepat. Jika lebih besar, maka mungkin butuh sedikit lebih lama.Karena
cp
ini adalah perintah userspace, ini tidak mempengaruhi integritas sistem file.Anda tentu harus siap bahwa setidaknya satu file tidak akan disalin sepenuhnya jika Anda mematikan
cp
program runnning .sumber
CAP_SYS_RAWIO
di Linux atau yang setara di OS lain) yang memberi mereka akses langsung ke perangkat yang mendasari sistem file (misalnyasudo dd if=/dev/urandom of=/dev/sda1
) dapat mendatangkan segala macam malapetaka.cp
, itu mungkin akan rusak dari selesaicp
juga ...