जीएनयू / लिनक्स: ओवरले ब्लॉक डिवाइस / स्टैकेबल ब्लॉक डिवाइस


14

GNU / Linux में यूनियन माउंट है जो dirs को ओवरले करता है। तो आप केवल पढ़ने योग्य डायर के ऊपर एक लिखने योग्य डायर माउंट कर सकते हैं। जब लिखने योग्य डियर अनमाउंट है तो रीड-ओनली डायर अछूता है।

मैं ब्लॉक उपकरणों के लिए समान कार्यक्षमता की तलाश कर रहा हूं - अधिमानतः एक फ़ाइल में संग्रहीत लेखन योग्य भाग के साथ। इसलिए मैं कुछ इस तरह चलाना चाहूंगा:

device-setup /dev/newdevice /dev/read-only-device overlayfile

यदि मैं लिखता / लिखता / नया करता हूं तो परिवर्तन ओवरलेइफाइल में संग्रहित होने चाहिए। यदि मैं लिखे गए क्षेत्रों को पढ़ता हूं, तो मुझे ओवरलेफ़ाइल से डेटा प्राप्त करना चाहिए। यदि मैं उन क्षेत्रों को नहीं पढ़ता, जिन्हें मुझे / देव / रीड-ओनली-डिवाइस से डेटा प्राप्त करना चाहिए।

क्या ऐसा कोई उपकरण मौजूद है?


जवाबों:


22

आप डिवाइस मैपर और उसके snapshotलक्ष्य के साथ ऐसा कर सकते हैं ।

असल में, आप वही करेंगे जो LVM करता है जब आप एक लिखने योग्य स्नैपशॉट बनाते हैं।

dev=/dev/read-only-device
ovl=/path/to/overlay.file
newdevname=newdevice
size=$(blockdev --getsz "$dev")

loop=$(losetup -f --show -- "$ovl")
printf '%s\n' "0 $size snapshot $dev $loop P 8" |
  dmsetup create "$newdevname"

तब आप ओवरले डिवाइस को एक्सेस कर सकते हैं /dev/mapper/newdevice

यदि आपको एक ही समय में मूल डिवाइस तक पहुंच की आवश्यकता है, तो आप कर सकते हैं:

printf '%s\n' "0 $size snapshot-origin $dev" |
  dmsetup create originaldevice

और उस तक पहुँच सकते हैं /dev/mapper/originaldevice

आप उस डिवाइस को लिख सकते हैं, फिर स्नैपशॉट डिवाइस पर लिखी गई विखंडू के अलावा, ओवरले फ़ाइल में उन स्नैप्स की एक प्रति शामिल होगी जो स्नैपशॉट-मूल में लिखते समय ओवरराइट की गई हैं।

ओवरले फ़ाइल एक विरल फ़ाइल हो सकती है। (उदाहरण के लिए, इसे बनाएं truncate -s10G the-file), और मूल उपकरण जितना बड़ा होना जरूरी नहीं है। आप बता सकते हैं कि यह कितना पूर्ण है dmsetup status "$newdevname"

नोट: एक स्नैपशॉट डिवाइस पर आकार और सामग्री reqirements हैं


1
एक बाद का दिलचस्प सवाल यह है कि क्या acc.umulated परिवर्तन बाद में मूल डिवाइस में विलय किया जा सकता है
imz - इवान ज़ाखैराशेव

1
बाद का जवाब: हाँ। "डिवाइस-मैपर आपको अनुमति देता है ... *) ब्लॉक डिवाइस के स्नैपशॉट को स्नैपशॉट के मूल डिवाइस में वापस मर्ज करने के लिए।" kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Ivan Zakharyaschev

स्नैपशॉट लक्ष्य (आपके मामले में 8) के पैरामीटर का क्या मतलब है? इसे कैसे चुनें?
इम्ज़ - इवान ज़खरीशेव

1
@ डीएम तालिकाओं में वे संख्या हमेशा 512 बाइट इकाइयों को संदर्भित करती है, न कि अंतर्निहित ब्लॉक उपकरणों के भौतिक क्षेत्र के आकार को। तो कुछ का उपयोग करना जो कि 8 के मल्टीपल स्नैपशॉट नहीं है एक डिवाइस के ऊपर 4K सेक्टर के साथ एक बुरा विचार होगा।
स्टीफन चेजलस

1
@ इसके अलावा, विखंडन स्नैपशॉट की बारीकता को निर्धारित करता है। यह ओवरले फ़ाइल के लिए FS के रुकावट के बारे में नहीं है, लेकिन ब्लॉक डिवाइस पर जो कुछ भी बैठा है, उस पर किए गए I / O संचालन की गानुलरिटी। इसलिए रोलबैक। Getz बनाम गेटाइज़ के लिए धन्यवाद।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.