क्या यह संभव है कि मक्खी पर एक gzip संपीड़ित dd छवि माउंट की जाए?


66

मुझे पहली बार सिस्टम बैकअप देने के लिए एक इमेज बैकअप बनाना पसंद है। इस पहली बार के बाद मैं वृद्धिशील बैकअप करने के लिए rsync का उपयोग करता हूं।

मेरी सामान्य छवि बैकअप निम्नानुसार है:

खाली स्थान को माउंट करें और शून्य करें:

dd if=/dev/zero of=temp.dd bs=1M

rm temp.dd

umount और dd को संपीड़ित करते हुए ड्राइव

dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz

सिस्टम को सामान्य करने के लिए, मैं आमतौर पर एक करूँगा

gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K

यह वास्तव में सीधा है और मुझे 'संपूर्ण ड्राइव' को बचाने की अनुमति देता है, लेकिन वास्तव में उपयोग किए गए स्थान को बचा सकता है।

यहाँ समस्या है। आइए कहते हैं कि मैं उपरोक्त कार्य करता हूं, लेकिन एक स्वच्छ प्रणाली पर नहीं और जल्द ही पर्याप्त होने वाले rsync बैकअप प्राप्त नहीं करते हैं और ऐसी फाइलें हैं जो मैं एक्सेस करना चाहता हूं जो छवि पर हैं। मान लें कि मेरे पास वास्तव में unzip और dd को ड्राइव करने के लिए स्टोरेज स्पेस नहीं है, लेकिन व्यक्तिगत फ़ाइलों को प्राप्त करने के लिए छवि को माउंट करना चाहते हैं .... क्या यह संभव है?

आम तौर पर, कोई भी dd छवि को संपीड़ित नहीं करेगा, जो आपको केवल छवि का उपयोग करके माउंट करने की अनुमति देगा -o loop... लेकिन यह मेरा मामला नहीं है ...

मक्खी पर संकुचित img बढ़ते के लिए कोई सुझाव?

का उपयोग कर सकते हैं AVFS फिर 'माउंट' के लिए GZ फ़ाइल आंतरिक dd.img में फिर काम बढ़ते (मैं ऐसा नहीं सोचता ... लेकिन सत्यापन की आवश्यकता होगी ...)?


आपको SquashFSइस तरह की चीजों के लिए उपयोग करना चाहिए । यह डुप्लिकेट की गई फ़ाइलों को डी-ड्यूप भी करता है।
अवीओ

ऐसा लगता है कि यह साथी आपके बारे में क्या पूछ रहा है: blogs.gnome.org/muelli/2012/10/……
जोशुआ

मैं दूसरे एवियो का सुझाव देता हूं। केवल एक ही चीज़ स्क्वैश फ़ॉर आर्काइव नहीं है। यह xattrs को संग्रहित करता है, इसलिए सेलिनक्स विशेषताओं, आदि। यदि आप एसल का उपयोग नहीं करते हैं, तो स्क्वैशफ्लो आईएमएचओ जाने का रास्ता है। मुझे हाल ही में "बस के मामले में" कुछ पुराने ड्राइव को संग्रह करना पड़ा है जो पहले से ही नए स्टोरेज में माइग्रेट कर चुके हैं, और स्क्वैशफॉब्स नौकरी के लिए एकदम सही थे।
क्यूबा ओब

जवाबों:


66

यह इस बात पर निर्भर करता है कि डिस्क छवि पूर्ण डिस्क छवि है, या सिर्फ एक विभाजन है।

विभाजन धोना

यदि डिस्क अच्छी स्थिति में है, तो आप बेहतर संपीड़न प्राप्त करेंगे यदि आप डिस्क पर शून्य स्थान को शून्य से धोते हैं। यदि डिस्क विफल हो रही है, तो इस चरण को छोड़ दें।

यदि आप एक संपूर्ण डिस्क की इमेजिंग कर रहे हैं तो आप डिस्क के प्रत्येक विभाजन को धोना चाहेंगे।

चेतावनी: सावधान रहें, आप सेट करना चाहते ofएक करने के लिए फ़ाइल घुड़सवार विभाजन में, PARTITION अपने आप!

mkdir image_source
sudo mount /dev/sda1 image_source
dd if=/dev/zero of=image_source/wash.tmp bs=4M
rm image_source/wash.tmp
sudo umount image_source

एक विभाजन छवि बनाना

mkdir image
sudo dd if=/dev/sda1 of=image/sda1_backup.img bs=4M

sdaडिवाइस का नाम कहां है, और 1विभाजन संख्या है। अपने सिस्टम के अनुसार समायोजित करें यदि आप एक अलग डिवाइस या विभाजन की छवि बनाना चाहते हैं।

संपूर्ण डिस्क छवि बनाना

mkdir image
sudo dd if=/dev/sda of=image/sda_backup.img bs=4M

sdaउपकरण का नाम कहां है। अपने सिस्टम के अनुसार समायोजित करें यदि आप एक अलग डिवाइस की छवि बनाना चाहते हैं।

दबाव

एक "स्क्वाशफ़" छवि बनाएं जिसमें पूर्ण असम्पीडित छवि हो।

sudo apt-get install squashfs-tools
mksquashfs image squash.img

स्ट्रीमिंग संपीड़न

एक अलग अस्थायी फ़ाइल को डिस्क का पूर्ण आकार बनाने से बचने के लिए, आप एक स्क्वैशफ्लो छवि में स्ट्रीम कर सकते हैं।

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

एक संकुचित विभाजन छवि को माउंट करना

पहले स्क्वैशफुट छवि को माउंट करें, फिर माउंटेड स्क्वैशफॉस्ट छवि में संग्रहीत विभाजन छवि को माउंट करें।

mkdir squash_mount
sudo mount squash.img squash_mount

अब आपके पास कंप्रेस्ड इमेज माउंट हो गई है, इमेज को खुद माउंट करें (जो स्क्वाशफ इमेज के अंदर है)

mkdir compressed_image
sudo mount squash_mount/sda1_backup.img compressed_image

अब आपकी छवि के नीचे मुहिम शुरू की गई है compressed_image

संपादित करें: यदि आप इस बिंदु पर बस विभाजन पर डिस्क छवि को पुनर्स्थापित करना चाहते थे (सामग्री को ब्राउज़ करने / पढ़ने के लिए बढ़ते के बजाय), बस करने के बजाय गंतव्य पर ddछवि ।squash_mount/sda1_backup.imgmount

एक संपीड़ित पूर्ण डिस्क छवि माउंट करना

इसके लिए आपको kpartx नामक पैकेज का उपयोग करना होगा। kpartx आपको एक पूर्ण डिस्क छवि में अलग-अलग विभाजन माउंट करने की अनुमति देता है।

sudo apt-get install kpartx

सबसे पहले, अपने स्क्वैश विभाजन को माउंट करें जिसमें पूर्ण डिस्क छवि है

mkdir compressed_image
sudo mount squash.img compressed_image

अब आपको पूर्ण डिस्क छवि के प्रत्येक विभाजन के लिए उपकरण बनाने की आवश्यकता है:

sudo kpartx -a compressed_image/sda_backup.img

यह पूर्ण डिस्क छवि में विभाजन के लिए उपकरण बनाएगा /dev/mapper/loopNpPजहां N लूपबैक डिवाइस के लिए निर्दिष्ट संख्या है, और P विभाजन संख्या है। उदाहरण के लिए /dev/mapper/loop0p1:।

अब आपके पास पूर्ण डिस्क छवि में अलग-अलग विभाजन को माउंट करने का एक तरीका है:

mkdir fulldisk_part1
sudo mount /dev/mapper/loop0p1 fulldisk_part1

दिलचस्प इस समस्या पर ले (gzip के बजाय स्क्वैश)। मैं स्क्वैशफॉल्स टूल्स से बहुत अपरिचित हूँ ... क्या आप gzip पार्टीशन के साथ फ्लाई पर स्क्वैश पार्टीशन बनाने के लिए dd के आउटपुट को पाइप कर सकते हैं? संपीड़न अनुपात क्या है (gzip ठीक है / अच्छा है, esp ने इस तथ्य को दिया है कि मैं 'शून्य स्थान के साथ रिक्त स्थान') साफ़ कर रहा हूं?
g19fanatic

आप हार्ड डिस्क पर छवि कैसे वापस करेंगे?
g19fanatic

2
@ g19fanatic असम्पीडित डिस्क छवि "अंदर" स्क्वाशफ छवि है। आप स्क्वाशफ छवि को माउंट करते हैं, फिर उसके अंदर की छवि को डेस्टिनेशन डिस्क पर डालते हैं।
doug65536

@ g19fanatic संपीड़न उत्कृष्ट था (मेरे मामले में gzip के समान ही लगभग)। mksquashfs तेज था, यह समानांतर है। मेरे 990x (6 कोर) पर यह वास्तव में डेस्टिनेशन डिस्क राइट स्पीड, 100 एमबी / सेकंड के आसपास सीमित था।
doug65536

3
@ g19fanatic आप इसे छद्म फ़ाइल पास करने के लिए -pया -pfझंडे का उपयोग करके स्क्वाश में स्ट्रीम कर सकते हैं । एक छद्म फ़ाइल का उपयोग डिवाइस नोड्स बनाने के लिए किया जा सकता है, जो आप अन्यथा रूट के बिना नहीं कर सकते हैं (निर्माण प्रक्रिया के हिस्से के रूप में छवियां बनाने के लिए उपयोगी) या छवि में कुछ कमांड के आउटपुट को स्ट्रीम करने के लिए। डॉक्स में दिए गए उदाहरणों में से एक ( /usr/share/doc/squashfs-tools/examples/pseudo-file.exampleडेबियन / उबंटू पर) input f 444 root root dd if=/dev/sda1 bs=1024 count=10डिस्क इमेज से पहले 10K को स्क्वाशफ इमेज में "इनपुट" नामक फाइल में कॉपी करना है।
ब्रायन कैंपबेल

15

यदि छवि केवल पढ़ने के लिए है, तो आप nbdkit ( मैन पेज ) का उपयोग भी कर सकते हैं और इसके xz प्लगइन (xz को gzip की तुलना में बेहतर संपीड़न और रैंडम एक्सेस समय प्रदान करना चाहिए)।

संकुचित विभाजन छवि बनाएँ

dd if=/dev/sda1 bs=16M | xz -9 --block-size=16MiB - > sda1.img.xz

--block-size16 MiB का एक विकल्प अच्छा यादृच्छिक अभिगम प्रदर्शन प्रदान करना चाहिए।

नोट: आप वैकल्पिक एक्सज़ कम्प्रेशन प्रोग्राम जैसे कि पिक्सज़ का उपयोग कर सकते हैं जो समानांतर संपीड़न प्रदान करता है, बस यह सुनिश्चित करें कि यह कई छोटे ब्लॉकों में आउटपुट को विभाजित करता है, अन्यथा nbdkit को बहुत सारे डेटा को डिकम्प्रेस करना पड़ता है। उदाहरण के लिए सितंबर 2015 तक, pxz इसका समर्थन नहीं करता है।

इसे nbdkit के साथ परोसें

nbdkit --no-fork --user nobody --group nobody -i 127.0.0.1 \
       xz file=sda1.img.xz

NBD सर्वर से कनेक्ट करें

nbd-client 127.0.0.1 10809 /dev/nbd0 -nofork

इसे केवल पढ़ने के लिए माउंट करें

mount -o ro /dev/nbd0 sda1

जब हो जाए

umount /dev/nbd0
nbd-client -d /dev/nbd0

+ (या मार के साथ ) दबाकर nbdkit बंद करो ।CtrlC


15

प्रयत्न, कोशिश archivemount

root@srv1:/backup# archivemount windows-2003-S.gz /target/
Unrecognized archive format
root@srv1:/backup# archivemount -o formatraw windows-2003-S.gz /target/
Calculating uncompressed file size. Please wait.
root@srv1:/backup# ls /target/
data
root@srv1:/backup# file /target/data
/target/data: DOS/MBR boot sector; partition 1 : ID=0x7, start-CHS (0x0,1,1), end-CHS (0x3ff,254,63), startsector 63, 58717512 sectors, extended partition table (last)

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

http://linuxaria.com/howto/how-to-mounts-an-archive-for-access-as-a-file-system

बढ़ते संग्रह के बाद आप इसे नियमित फ़ाइल की तरह सामग्री का उपयोग कर सकते हैं। शायद विभाजन तालिका प्राप्त करें, या परिवर्तित करें, छवि को qemu टूल के साथ माउंट करें।

छवि से बूटिंग के लिए स्क्वाशफ उपयोगी है, लेकिन बैकअप के लिए बहुत जटिल है।


उत्तम! यह अब तक का सबसे आसान और सुरुचिपूर्ण समाधान है। मुझे आश्चर्य है कि यहां वोट क्यों नहीं हैं।
ट्रांसलूसेंटक्लाउड

मुझे लगता है कि ऐसा इसलिए है क्योंकि अगर आप एक संग्रह को disk.img.gz जैसे संग्रह पर संग्रहीत करते हैं, तो संग्रहमाउंट के साथ फ़ोल्डर पर, / mnt /, आपको एक ही फ़ाइल /mnt/disk.img मिलेगा, जिसे आपको फिर कहीं और माउंट करना होगा। इसके बजाए प्रश्न दोनों को एक ही चरण में खोलना चाहता है (और आर्कमाउंट ऐसा करने में सक्षम लगता है।
p91paul

2
यह जवाब बहुत दिलचस्प भी है। मेरा मानना ​​है कि स्क्वाशफ को अधिक प्यार मिलता है क्योंकि इसमें अधिक जागरूकता होती है। मैंने तुरंत नाम को पहचान लिया लेकिन आर्कमाउंट के बारे में कभी नहीं सुना। मुझे इसे एक शॉट भी देना होगा!
g19fanatic

2
आर्कमाउंट कमांड द्वारा बनाई गई एक छवि को माउंट करने की अनुमति नहीं देताdd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
सर्गेई

3
सहमत - लेखन के समय, आर्कमाउंट टार अभिलेखागार का समर्थन करता है जो कि gzipped हैं, लेकिन सादे gzipped फाइलें नहीं।
mwfearnley

10

यह उत्तर क्रिस्टियन सियुपिटु के उत्तर का पूरक है । यदि आप एक उचित ब्लॉक आकार के साथ xz संपीड़न का उपयोग करते हैं, तो आप गेस्टफ़िश या इस तरह के अन्य libguestfs टूल का उपयोग करके डिस्क छवि तक पहुंच सकते हैं :

nbdkit xz file=disk.img.xz --run 'guestfish --format=raw -a $nbd -i'

8

ज़रुरी नहीं। आप वास्तव में संपीड़ित फ़ाइल में पूरी तरह से पहले डिकम्प्रेसिंग के बिना एक विशिष्ट ब्लॉक की तलाश नहीं कर सकते हैं, जिससे ब्लॉक डिवाइस के रूप में संपीड़ित छवि का उपयोग करना मुश्किल हो जाता है।

आप कुछ का उपयोग कर सकते हैं dumpऔर restore(या tar, वास्तव में), जिनमें से सभी एक स्ट्रीमिंग प्रारूप का उपयोग करते हैं ... इसलिए आप असम्पीडित स्ट्रीम के माध्यम से प्रभावी ढंग से स्कैन करके इनविजिलेटर फ़ाइलों तक पहुंच सकते हैं। इसका मतलब है कि यदि आप जो फ़ाइल चाहते हैं वह संपीड़ित संग्रह के अंत में है तो आपके पास प्रतीक्षा करने के लिए एक लंबा समय हो सकता है, लेकिन इसके लिए आपको डिस्क पर सब कुछ वास्तव में डिकम्प्रेस करने की आवश्यकता नहीं है।

tarबैकअप के लिए उपयोग करना थोड़ा पुराना लग सकता है, लेकिन आपको बहुत अधिक लचीलापन मिलता है।


1
समस्या इस तथ्य में निहित है कि मुझे यह भी नहीं पता है कि ब्याज की फाइल वास्तव में इस संपीड़ित बैकअप पर है ... क्या आप एक फ़ाइल एक्सप्लोरर के बारे में जानते हैं जो संपूर्ण .gz'd छवि के माध्यम से जाएगा, फ़ाइल / डीआईआर रखें। स्मृति में संरचना, संरचना का एक सरल दृश्य प्रदान करते हैं और आपको फ़ाइलों को 'पिक' करने की अनुमति देते हैं (अब यह पता है कि वे कहाँ मौजूद हैं) निकालने के लिए? यह एक बहुत ही आला विनिर्देश है ... लेकिन मैं इस तरह से कुछ के लिए टन का उपयोग कर सकता है ... अगर यह मौजूद है।
g19fanatic

1
यदि ऐसा नहीं होता है, तो क्या आप मुझे gz'd छवि से संरचना खींचने के तरीके के बारे में कुछ निर्देश देने में सक्षम होंगे? मैं इस तरह के एक कार्यक्रम (एक जीवित के लिए कार्यक्रम ...) बनाने में सक्षम हो जाएगा, लेकिन छवि डेटा और विभिन्न फाइल सिस्टम की बारीकियों के विषय पर अंधा हूं।
g19fanatic

मुझे संदेह है कि आपका अपना उपकरण बनाना एक बड़ी परियोजना होने जा रही है जो आप वास्तव में शुरू करना चाहते हैं। हालाँकि ... यह मानते हुए कि आपके पास एक ext [234] फाइल सिस्टम है, मैं e2fsprogs पैकेज का सुझाव दूंगा , या शायद फ्यूज- ext2 जैसा कुछ । दोनों ext [234] फाइल सिस्टम के साथ बातचीत करने के लिए उपयोगकर्ता-स्थान उपकरण प्रदान करते हैं।
लार्क्स

यह भी ध्यान दें कि आपके पास जो फाइल सिस्टम इमेज नहीं है, वह पूरी डिस्क इमेज है, जिसका अर्थ है कि आपको सबसे पहले विभाजन तालिका को पार्स करना होगा और उपयुक्त विभाजन का पता लगाना होगा।
14

मैंने उपरोक्त प्रश्न को गलत समझा और इसे ठीक करूंगा। मैं आमतौर पर एक विभाजन आधारित dd छवि करता हूं और विभाजन तालिका की एक प्रति सहेजता हूं। मैं पूरी डिस्क प्रतियां करता था, लेकिन उचित स्थान पर पहुंचने के लिए विकल्पों के साथ माउंट करने से नफरत करता था।
14

3

क्रिस्टियन सियुपिटु के उत्तर के लिए एक और परिशिष्ट :

यदि आप nbdkitएक पूर्ण डिस्क छवि (बनाम विभाजन छवि) को माउंट करने के लिए उपयोग करते हैं , तो आपको एनबीडी सर्वर से कनेक्ट होने पर ब्लॉक आकार (डिस्क का सेक्टर आकार) निर्दिष्ट करने की आवश्यकता हो सकती है, क्योंकि यह 1024बाइट्स के लिए चूक है । इसके 512बजाय बाइट्स का उपयोग करने के लिए :

nbd-client 127.0.0.1 /dev/nbd0 -b 512 -n

उसके बाद, डिस्क के रूप में दिखाई देगा /dev/nbd0, और आपको विभाजन तालिका का उपयोग करके देखने में सक्षम होना चाहिए fdisk -l। हालांकि, विभाजन अभी तक माउंट नहीं हैं - विभाजन के लिए उपकरण बनाने के लिए kpartx( doug65536 के उत्तर से ) का उपयोग करें , जैसे:

kpartx -arv /dev/nbd0

अंत में, विभाजन दिखाई देंगे /dev/mapper/, और आप उन्हें हमेशा की तरह माउंट कर सकते हैं। रीडऑनली मोड ( -o ro) का उपयोग करना सुनिश्चित करें , क्योंकि xz प्लगइन केवल रीड का समर्थन करता है:

mount -o ro /dev/mapper/nbd0p3 /mnt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.