एक आभासी फ़ाइल जिसमें अन्य फ़ाइलों का संयोजन होता है


13

क्या इसके लिए एक फाइल सिस्टम ऑब्जेक्ट बनाने का एक तरीका है:

mknod files p
cat file1 file2 ... fileN > files

लेकिन ऐसा है कि इसे में खोजा जा सकता है, जैसे कि यह एक नियमित फ़ाइल थी?

जवाबों:


18

लिनक्स-आधारित ऑपरेटिंग सिस्टम पर, जिसे नेटवर्क ब्लॉक डिवाइस या डिवाइस मैपर डिवाइस के साथ किया जा सकता है। आपके द्वारा प्राप्त फ़ाइल एक ब्लॉक डिवाइस है।

के साथ nbd:

ln -s /path/to/first-file file.0
...
ln -s /path/to/last-file file.19
nbd-server -C /dev/null -m 127.0.0.1:12345 file

sudo nbd-client localhost 12345 /dev/nbd0

(सम्‍मिलन है /dev/nbd0)।

डिवाइस मैपर के साथ (फ़ाइल का आकार 512 से अधिक होना चाहिए):

sudo losetup /dev/loop0 file1
sudo losetup /dev/loop1 file2
s0=$(sudo blockdev --getsize /dev/loop0)
s1=$(sudo blockdev --getsize /dev/loop1)
printf '%s\n' "0 $s0 linear /dev/loop0 0" "$s0 $s1 linear /dev/loop1 0" |
  sudo dmsetup create mybundle

(सम्‍मिलन है /dev/mapper/mybundle)।


8

आज एक फ्यूज ड्राइवर लिखा है, अगर किसी को फ्यूज सॉल्यूशन में दिलचस्पी है (डिवाइस मैपर के साथ-साथ ऊपर दिए गए nbd- सॉल्यूशन से ब्लॉक डिवाइसेस रेगुलर फाइल नहीं बनाएंगे - जो टूट जाएगा, अगर आप परिणामी आउटपुट को सीधे वीडियो एडिटिंग के साथ इस्तेमाल करना चाहते हैं सॉफ्टवेयर या अन्य उपकरण जो सीधे ब्लॉक डिवाइस से पढ़ने के लिए तैयार नहीं हैं)

https://github.com/schlaile/concatfs


बहुत शिक्षाप्रद और सरल स्रोत का उपयोग करने के लिए! इसे बनाने और साझा करने के लिए धन्यवाद!
ग्रेज़गोरज़ विएर्ज़ोवेकी

3

आपने मूल रूप से प्रश्न के पहले वाक्य में इसका उत्तर दिया: हाँ, यह किया जा सकता है। हालाँकि, आपको कस्टम फ़ाइल सिस्टम ड्राइवर लिखना होगा। यदि इसे एक फाइल सिस्टम ऑब्जेक्ट माना जाता है, तो इसे कुछ स्तर पर कर्नेल द्वारा नियंत्रित किया जाना चाहिए (जिसमें FUSE शामिल है )। ड्राइवर को मानक फ़ाइल सिस्टम syscalls API ( stat(), open()इत्यादि, जिसमें मांग करना शामिल है) के लिए बैकएंड प्रदान करना होगा । आप इसे पूरी तरह से यूजर स्पेस में नहीं कर सकते हैं (कम से कम एक अखंड कर्नेल के साथ नहीं - लेकिन यहां तक ​​कि एक माइक्रोक्राइन के साथ भी आपको एक फाइल सिस्टम ड्राइवर प्रदान करने की आवश्यकता होगी, भले ही एक नियमित यूजरस्पेस प्रक्रिया के रूप में चल रहा हो)।


यह काफी स्पष्ट है कि यह किया जा सकता है। मुझे इस बात की उत्सुकता है कि क्या मानक un * x संकुल का उपयोग करके इसे प्राप्त करने का कोई त्वरित-हैक तरीका है - अधिमानतः bash w / o के माध्यम से एक समर्पित कर्नेल-स्पेस ड्राइवर लिखने की आवश्यकता है।
विटिको

1
स्टीफन का उत्तर देखें - मैं डिवाइस मैपर को पूरी तरह से भूल गया था।
पेट्रोफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.