'Cp'yi öldürdüğümde ne olur? Güvenli mi ve herhangi bir sonucu var mı?


23

Kopyalama cpkomutunu çalışırken Ctrl+ yazarak sonlandırdığımda ext4 dosya sisteminin sonuçları nelerdir C?

Dosya sistemi bozuluyor mu? Bölümün alanı eksik kopyalanan dosya tarafından işgal edildikten sonra silindikten sonra hala kullanılabilir mi?

Ve en önemlisi, bir cpişlemi sonlandırmak güvenli bir şey mi yapıyor?


1
Cevaplar ext4 için doğru olsa da, günlüğe kaydetmeden dosya sistemlerinin güvenli olamayabileceğini unutmayın.
Ave

3
@Ave Journaling'in bununla hiçbir ilgisi yok. Sistemler, hangi dosya sistemini kullandığınızdan bağımsız olarak atomiktir. Günlük kaydı, gücün aniden kaybolduğu durumlarda faydalıdır.
Orman

Yanıtlar:


22

Bunu yapmak güvenlidir, ancak doğal olarak kopyayı bitirmemiş olabilirsiniz.

Ne zaman cpkomut çalıştırılır, yani dosyanın kopyalarını yapmak çekirdeği talimat syscalls yapar. Sistem çağrısı, bir uygulamanın çekirdekten bir hizmet isteyen, örneğin diske veri okuma veya yazma gibi bir işlevi arayabileceği bir işlevdir. Kullanıcı alanı süreci sadece sistem çağrısının bitmesini bekler. Çağrıları izlemiş olsaydın şöyle bir şey olurdu:

open("/home/user/hello.txt", O_RDONLY)           = 3
open("/mnt/hello.txt", O_CREAT|O_WRONLY, 0644)   = 4
read(3, "Hello, world!\n", 131072)               = 14
write(4, "Hello, world!\n", 14)                  = 14
close(3)                                         = 0
close(4)                                         = 0

Bu kopyalanacak her dosya için tekrarlanır. Bu sistemlerin çalışması nedeniyle herhangi bir yolsuzluk oluşmaz. Bunun gibi sistemler tekrar girildiğinde, ölümcül sinyal sadece sistem bittikten sonra çalışır durumda değil, etkili olur. Bu nedenle, süreci zorla öldürmek, yalnızca çalışan sistem çağrısı bittikten sonra sona ermesine neden olacaktır. Bu, dosya sistemi sürücüsünün yaşadığı çekirdeğin, dosya sistemini aklı başında bir duruma getirmek için tamamlaması gereken işlemleri tamamlamada özgür olduğu anlamına gelir. Bu tür herhangi bir G / Ç, işlemin ortasında hiçbir zaman sonlandırılmayacak ve atomik işlem yapılabilecektir.

İlginçtir, bu yüzden böyle komutlar cpöldürüldüğünde derhal sonlandırılmayabilir. Çok büyük bir dosyayı kopyalayıp öldürürseniz, SIGKILL ile bile, geçerli çağrı tamamlanıncaya kadar işlem devam edecektir. Büyük bir dosyada, işlem kesintisiz bir durumda olacağından bu işlem biraz zaman alabilir.


2
@qwr Büyük olasılıkla glibc kütüphanesinin bir parçası değil, cpkendisi. Bunu dahili olarak bir değer olarak kullanan çeşitli dosya erişim işlevlerine sahiptir.
orman

2
Mükemmel cevap! cpBüyük dosyalarla uğraşırken bile SIGKILLing'in sonlandırılmasında bir gecikme olduğunu asla farketmemiştim ... belki de bir sürecin kesintisiz atomik işlemlerinin süresi çok kısadır. Aynı açıklama öldürme ddve diğer disk okuma / yazma işlemleri için de geçerli midir?
Seninha

1
@Seninha İşlemler oldukça kısadır, çünkü erişim önbelleğe alınır, bu sayede, patlamalarda yapılırsa, sürücünüzün gerçekten kullanabileceğinden çok daha fazla veri kopyalayabilirsiniz. Dosya gerçekten büyük ve yavaş bir ortama sahipse, önbellek doldurulabilir ve işlemin tamamlanması biraz zaman alabilir. Öldürmeye gelince dd, bunun için ne bsayarladığına bağlı . Sadece 512 ise (varsayılan), o zaman hızlı bir şekilde sonlandırılmalıdır. Daha büyükse, o zaman biraz daha uzun sürebilir.
orman

3
@ qwr 128kb topakları blok aygıtlardan okunurken coreutil'de varsayılan olarak kablolu olarak bağlanır, bu, sistem çağrılarını en aza indirgemek için yapılır. Çekirdekler
Fiisch

1
@AndrewHenle Belki de bunun atomik olan dosya sistemi meta verileri olduğunu söylemeliydim. Yazmanın kısmi olabileceği konusunda haklısın.
orman

20

Yana cpuserspace komuttur, bu dosya sistemi bütünlüğünü etkilemez.

Elbette, bir çalışma cpprogramını öldürürseniz en az bir dosyanın tamamen kopyalanmayacağına hazırlıklı olmanız gerekir .


14
Neden aşağı oy? Sırf şakacı olduğu için mi?
Stephen Kitt

6
Kesinlikle tüm cevaplarıma önem vermeyen en az bir kişi var gibi görünüyor. Oy verenin kim olduğunu bulmanın bir yolunu biliyor musunuz?
schily

2
Moderatörler bile kimin özel oy kullandığını bile bilmiyor - bu SO çalışanlarıyla anlaşılır bir şekilde sınırlandırılmış durumda. Soruşturmalarını istemek için "bize ulaşın" bağlantısını kullanabilirsiniz.
Philip Kendall

1
Bir kullanıcı programı dosya sistemi bütünlüğünü tehlikeye atabilseydi çok üzücü olurdu. Not: Elbette olabilir , olabilirdi ve dosya sistemi uygulamalarında hatalar olacak. Not # 2: Ayrıca, elbette, CAP_SYS_RAWIOdosya sisteminin (örneğin sudo dd if=/dev/urandom of=/dev/sda1) temel aygıta doğrudan erişmelerini sağlayan yüksek ayrıcalıklarla (örneğin Linux'ta veya diğer işletim sistemlerinde eşdeğer) çalışan kullanıcı programları her türlü hasara yol açabilir.
Jörg W Mittag

3
Eğer bir dosya sistemi kesintiye uğradıktan sonra cpbozulacak kadar bozuksa, muhtemelen cp
bitene
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.