जब मैं 'cp' मारता हूं तो क्या होता है? क्या यह सुरक्षित है और क्या इसके कोई परिणाम हैं?


23

एक ext4 फाइलसिस्टम जब मैं एक कॉपी करने को समाप्त के लिए परिणाम क्या हैं cpलिखकर आदेश Ctrl+ Cजबकि यह चल रहा है?

क्या फ़ाइल सिस्टम दूषित हो जाता है? क्या इसे हटाने के बाद भी अधूरी कॉपी की गई फ़ाइल द्वारा विभाजन का स्थान व्यस्त है?

और, सबसे महत्वपूर्ण बात, एक cpप्रक्रिया को समाप्त करना एक सुरक्षित चीज है?


1
ध्यान रखें कि जब ext4 के लिए उत्तर सही होते हैं, तो जर्नलिंग के बिना फाइल सिस्टम उतना सुरक्षित नहीं हो सकता है।
Ave

3
@Ave जर्नलिंग का इससे कोई लेना-देना नहीं है। आप जो फाइलसिस्टम इस्तेमाल करते हैं, उसकी परवाह किए बिना सिसकल्स परमाणु हैं। जर्नलिंग उन स्थितियों में उपयोगी है जहां बिजली अचानक खो सकती है।
वन

जवाबों:


22

यह करने के लिए सुरक्षित है, लेकिन स्वाभाविक रूप से आपने कॉपी को समाप्त नहीं किया होगा।

जब cpकमांड चलाया जाता है, तो यह syscalls बनाता है जो कर्नेल को फ़ाइल की प्रतियां बनाने का निर्देश देता है। एक syscall एक फ़ंक्शन है जो एक एप्लिकेशन कॉल कर सकता है जो कर्नेल से एक सेवा का अनुरोध करता है, जैसे डिस्क पर डेटा पढ़ना या लिखना। यूजर्सस्पेस प्रोसेस सिसकॉल के खत्म होने का इंतजार करता है। यदि आप कॉल का पता लगाने के लिए थे, तो यह कुछ इस तरह दिखाई देगा:

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

यह प्रत्येक फ़ाइल के लिए दोहराता है जिसे कॉपी किया जाना है। जिस तरह से ये syscalls काम करते हैं, उसके कारण कोई भ्रष्टाचार नहीं होगा। जब इस तरह के syscalls में प्रवेश किया जाता है, तो घातक संकेत केवल तभी प्रभावी होगा जब syscall समाप्त हो गया हो , न कि जब वह चल रहा हो। इस वजह से, इस प्रक्रिया को जबरन मारने का कारण केवल इसे समाप्त करना होगा क्योंकि वर्तमान में चल रहे सिस्केल समाप्त हो गए हैं। इसका मतलब यह है कि कर्नेल, जहां फाइलसिस्टम ड्राइवर रहता है, उन ऑपरेशंस को पूरा करने के लिए स्वतंत्र है, जिन्हें फाइल सिस्टम को एक सायन अवस्था में रखने के लिए पूरा करना है। इस तरह के किसी भी I / O को ऑपरेशन के बीच में कभी भी समाप्त नहीं किया जाएगा, जिससे वे परमाणु संचालन करेंगे।

दिलचस्प बात यह है कि इस तरह कमांड्स cpको मारने पर तुरंत समाप्त नहीं किया जा सकता है। यदि आप एक बहुत बड़ी फ़ाइल की प्रतिलिपि बना रहे हैं और इसे मारते हैं, यहां तक ​​कि SIGKILL के साथ भी, प्रक्रिया तब भी चलेगी जब तक कि वर्तमान syscall खत्म नहीं हो जाती। एक बड़ी फ़ाइल के साथ, इसमें कुछ समय लग सकता है, क्योंकि यह प्रक्रिया अबाधित स्थिति में होगी।


2
@qwr यह glibc पुस्तकालय का सबसे अधिक संभावना हिस्सा है, न कि cpस्वयं। इसमें विभिन्न फ़ाइल एक्सेस फ़ंक्शंस हैं जो आंतरिक रूप से एक मूल्य के रूप में उपयोग करते हैं।
वन

2
बहुत बढ़िया जवाब! मैंने कभी महसूस नहीं किया कि cpबड़ी फ़ाइलों के साथ काम करते हुए, इसे हटाने के बाद भी इसे समाप्त करने में देरी हो सकती है ... शायद एक प्रक्रिया के उन अबाधित परमाणु संचालन की अवधि बहुत कम है। क्या एक ही स्पष्टीकरण हत्या ddऔर अन्य डिस्क-रीडिंग / लेखन प्रक्रियाओं के लिए काम करता है?
सेनिन्हा

1
@Seninha ऑपरेशन बहुत संक्षिप्त हैं क्योंकि एक्सेस कैश हैं, इसलिए आप अपनी ड्राइव की तुलना में प्रति सेकंड बहुत अधिक डेटा कॉपी कर सकते हैं, यदि फटने पर ऐसा किया जाता है। यदि फ़ाइल वास्तव में बड़ी है और धीमे माध्यम पर है, तो कैश भर सकता है और इस प्रक्रिया को मारने में कुछ समय लग सकता है। मारने के रूप में dd, यह निर्भर करता है कि bsआप इसके लिए क्या निर्धारित करते हैं। यदि यह केवल 512 (डिफ़ॉल्ट) है, तो इसे जल्दी से समाप्त करना चाहिए। यदि यह बड़ा है, तो इसमें थोड़ा अधिक समय लग सकता है।
वन

3
@qwr 128kb चॉक् स को ब्लॉकवूड से पढ़ते समय कोरुटिल्स में डिफॉल्ट डिफॉल्ट किया जाता है, यह सिस्कॉल को कम करने के प्रयास में किया जाता है। विश्लेषण कोर्यूटिल्स
Fiisch

1
@AndrewHenle शायद मुझे कहना चाहिए था कि यह फाइलसिस्टम मेटाडेटा है जो परमाणु है। आप सही हैं कि एक लेखन आंशिक हो सकता है।
वन

20

चूंकि cpएक यूजरस्पेस कमांड है, यह फाइलसिस्टम अखंडता को प्रभावित नहीं करता है।

आपको निश्चित रूप से तैयार रहने की आवश्यकता है कि यदि आप एक रनिंग cpप्रोग्राम को मारते हैं तो कम से कम एक फ़ाइल पूरी तरह से कॉपी नहीं की गई होगी ।


14
क्यों होता है पतन? सिर्फ इसलिए कि यह विद्वतापूर्ण है?
स्टीफन किट

6
वहाँ निश्चित रूप से कम से कम एक व्यक्ति लगता है जो मेरे सभी उत्तरों को कम कर देता है। क्या आप यह पता लगाने का एक तरीका जानते हैं कि किसने क्या किया?
स्किल्ली

2
यहां तक ​​कि मध्यस्थ भी नहीं पता लगा सकते हैं कि किसने विशिष्ट वोट बनाए - जो कि एसओ कर्मचारियों के लिए काफी सीमित है। आप उन्हें जांच के लिए पूछने के लिए "हमसे संपर्क करें" लिंक का उपयोग कर सकते हैं।
फिलिप केंडल

1
यह बहुत दुख की बात होगी अगर कोई यूजरस्पेस प्रोग्राम फाइलसिस्टम अखंडता से समझौता करने में सक्षम था। नोट: बेशक, वहाँ हो सकता है, वहाँ रहे हैं, और वहाँ फ़ाइल सिस्टम कार्यान्वयन में कीड़े हो जाएगा। नोट # 2: इसके अलावा, निश्चित रूप से, उन्नत विशेषाधिकार (जैसे CAP_SYS_RAWIOलिनक्स में लिनक्स या अन्य OS में समतुल्य) के साथ चलने वाले यूजरस्पेस प्रोग्राम जो उन्हें फाइलसिस्टम के अंतर्निहित डिवाइस तक सीधे पहुंच प्रदान करते हैं (जैसे sudo dd if=/dev/urandom of=/dev/sda1) सभी प्रकार के कहर बरपा सकते हैं।
जार्ज डब्ल्यू मित्तग

3
और अगर एक फाइलसिस्टम एक छोटी गाड़ी को बाधित करने के बाद भ्रष्ट होने के लिए पर्याप्त था cp, तो यह संभवतः एक समाप्त cpभी भ्रष्ट हो जाएगा ...
ilkkachu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.