सबसे पहले /sysएक छद्म फाइल सिस्टम है । यदि आप देखते हैं तो आपको /proc/filesystemsपंजीकृत फाइल सिस्टम की एक सूची मिलेगी, जहां काफी कुछ nodev
सामने हैं। यह इंगित करता है कि वे छद्म फाइलसिस्टम हैं । इसका मतलब है कि वे एक रैम-आधारित फाइल सिस्टम के रूप में चल रहे कर्नेल पर मौजूद हैं। आगे उन्हें ब्लॉक डिवाइस की आवश्यकता नहीं है।
$ cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
...
बूट पर कर्नेल इस सिस्टम को माउंट करता है और अनुकूल होने पर प्रविष्टियों को अपडेट करता है। उदाहरण के लिए, जब बूट या द्वारा नया हार्डवेयर पाया जाता है udev।
में /etc/mtabआप आमतौर पर खोजने के द्वारा माउंट:
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
विषय पर एक अच्छे पेपर के लिए पैट्रिक मोशेल के - द साइफ्स फाइलसिस्टम पढ़ें
।
/ एसआईएस फाइलों की प्रतिमा
यदि आप एक निर्देशिका के तहत जाते हैं /sysऔर करते हैं तो ls -lआप देखेंगे कि सभी फाइलों का आकार एक है। आमतौर पर 4096 बाइट्स। इसके द्वारा सूचित किया जाता है sysfs।
:/sys/devices/pci0000:00/0000:00:19.0/net/eth2$ ls -l
-r--r--r-- 1 root root 4096 Apr 24 20:09 addr_assign_type
-r--r--r-- 1 root root 4096 Apr 24 20:09 address
-r--r--r-- 1 root root 4096 Apr 24 20:09 addr_len
...
इसके अलावा आप statएक फ़ाइल पर कर सकते हैं और एक अन्य विशिष्ट सुविधा को नोटिस कर सकते हैं ; यह 0 ब्लॉक पर है। जड़ (स्टेट / एसआईएस) का /stat/fsभी इनोड है। आमतौर पर इनोड 2 है। आदि।
rsync बनाम cp
छद्म फ़ाइलों को सिंक्रनाइज़ करने की rsync विफलता के लिए सबसे आसान स्पष्टीकरण शायद उदाहरण के लिए है।
मान लें कि हमारे पास एक फाइल है जिसका नाम address18 बाइट्स है। फ़ाइल की एक lsया stat4096 बाइट्स की रिपोर्ट करती है।
rsync
- फ़ाइल विवरणक, fd खोलता है।
- आकार जैसी जानकारी प्राप्त करने के लिए fstat (fd) का उपयोग करता है।
- साइज बाइट्स यानी 4096 को पढ़ने के लिए निर्धारित करें । यह @mattdm द्वारा लिंक किए गए कोड का 253 होगा ।
read_size == 4096
- पूछना; पढ़ें: 4096 बाइट्स
- एक छोटी स्ट्रिंग को 18 बाइट्स पढ़ा जाता है।
nread == 18
read_size = read_size - nread (4096 - 18 = 4078)
- पूछना; पढ़ें: 4078 बाइट्स
- 0 बाइट्स पढ़ें (जैसा कि पहले पढ़ा कि फाइल में सभी बाइट्स का सेवन किया गया है)।
nread == 0, लाइन 255
4096बाइट्स पढ़ने में असमर्थ । जीरो आउट बफर।
- त्रुटि सेट करें
ENODATA।
- वापसी।
- त्रुटि की रिपोर्ट करें।
- पुन: प्रयास करें। (लूप के ऊपर)।
- असफल।
- त्रुटि की रिपोर्ट करें।
- ठीक।
इस प्रक्रिया के दौरान यह वास्तव में पूरी फाइल को पढ़ता है। लेकिन कोई भी आकार उपलब्ध नहीं होने के कारण यह परिणाम को मान्य नहीं कर सकता है - इस प्रकार विफलता केवल विकल्प है।
cp
- फ़ाइल विवरणक, fd खोलता है।
- St_size (lstat और stat का उपयोग करता है) जैसी जानकारी प्राप्त करने के लिए fstat (fd) का उपयोग करता है।
जाँच करें कि क्या फ़ाइल विरल होने की संभावना है। वह है फाइल में छेद आदि।
copy.c:1010
/* Use a heuristic to determine whether SRC_NAME contains any sparse
* blocks. If the file has fewer blocks than would normally be
* needed for a file of its size, then at least one of the blocks in
* the file is a hole. */
sparse_src = is_probably_sparse (&src_open_sb);
के रूप में statशून्य ब्लॉक करने के लिए रिपोर्ट फ़ाइल यह विरल के रूप में वर्गीकृत किया जाता है।
हद-कॉपी करके फ़ाइल पढ़ने की कोशिश करता है ( सामान्य
विरल फ़ाइलों को कॉपी करने का एक अधिक कुशल तरीका ), और विफल रहता है।
- विरल-कॉपी करके कॉपी करें।
- MAXINT के अधिकतम रीड आकार के साथ प्रारंभ होता है।
आमतौर 18446744073709551615पर एक 32 बिट सिस्टम पर
बाइट्स।
- पूछना; 4096 बाइट्स पढ़ें। (स्टेटम आकार जानकारी से स्मृति में आवंटित आकार।)
- एक छोटी स्ट्रिंग को 18 बाइट्स पढ़ा जाता है।
- जांच लें कि क्या छेद की जरूरत है, नहीं।
- लक्ष्य पर बफर लिखें।
- अधिकतम रीड साइज से 18 घटाएं।
- पूछना; 4096 बाइट्स पढ़ें।
- 0 बाइट्स के रूप में सभी पहले पढ़ने में भस्म हो गया।
- सफलता लौटाओ।
- सब ठीक है। फ़ाइल के लिए झंडे अपडेट करें।
- ठीक।
/sys/?