हार्ड ड्राइव के / बिन / dd के साथ बनाए गए `img` को कैसे माउंट करते हैं?


19

मैं ddएक 80GB ड्राइव का बैकअप लेता था

dd if=/dev/sdb of=~/sdb.img

अब मुझे उस ड्राइव पर कुछ फ़ाइलों को एक्सेस करने की आवश्यकता है, लेकिन मैं ड्राइव पर वापस ".img" कॉपी नहीं करना चाहता।

mount ~/sdb.img /mnt/sdbया तो काम नहीं करता है। यह रिटर्न:

mount: you must specify the filesystem type

मैंने फाइलसिस्टम टाइप को खोजने की कोशिश की file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

क्या माउंट को पुनर्स्थापित sdb.imgकरना संभव है , या मुझे ddड्राइव को पुनर्स्थापित करने के लिए उपयोग करना चाहिए ?

जवाबों:


27

जब आप का उपयोग ddपर /dev/sdbके बजाय /dev/sdb1या /dev/sdb2, आप कॉपी सभी विभाजनों में कहा ड्राइव से एक फ़ाइल।

आपको प्रत्येक विभाजन को अलग से माउंट करना होगा।


किसी फ़ाइल से पार्टीशन को माउंट करने के लिए , आपको पहले यह पता लगाना होगा कि उस फ़ाइल में कहाँ पार्टीशन रहता है।

प्रत्येक विभाजन file -s sdb.imgके startsectorsलिए हम अपने आउटपुट का उपयोग करते हैं :

sdb.img: x86 बूट सेक्टर; विभाजन 1 : आईडी = 0x12, स्टारथेड 1, स्टार्टर 63 , 10233342 सेक्टर; विभाजन 2 : आईडी = 0xc, सक्रिय, स्टारथेड 0, स्टार्टर 10233405 , 72517410 सेक्टर; विभाजन 3 : आईडी = 0xc, स्टारथेड 0, स्टार्टर 82750815 , 73545570 सेक्टर, कोड 0270

विभाजन      प्रारंभकर्ता
1 63
2 10233405
3 82750815

एक एकल विभाजन को माउंट करने के लिए, उस विभाजन का प्रारंभकर्ता कहां X है , चलाएं:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

तो दूसरे विभाजन को माउंट करने के लिए , आपको दौड़ना होगा:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

sidenote: सुनिश्चित करें कि /mnt/sdb2आप इसे चलाने से पहले मौजूद हैं।

मज़े करो!


अद्यतन: जवाब में, मैंने माना कि आपकी छवि का क्षेत्र आकार था 512, कृपया इस प्रश्न को देखें कि इसकी गणना कैसे करें।


आप file -l sdb.imgअपने प्रश्न के उत्तर में पोस्ट किए गए का उपयोग करके एक सारणीबद्ध प्रारूप में भी शुरुआत कर सकते हैं : unix.stackexchange.com/questions/2668/…
छात्र

@student: भविष्य के पाठकों के लिए केवल एक सुधार: यह fdisk -lनहीं होगा file -l
रनियम

आगे स्पष्टीकरण - आप उस आदेश में -u विकल्प जोड़कर 512 बाइट क्षेत्रों की संख्या प्राप्त कर सकते हैं - इसलिएfdisk -u -l sdb.img
हारून मेसन

यदि आपका संस्करण fileडिफ़ॉल्ट रूप से कम बातूनी है, -kतो उत्तर में दिखाया गया आउटपुट प्राप्त करने के लिए स्विच को जोड़ने का प्रयास करें - इस तरह file -k FILENAME.img:।
क्रिश्चियन पिसेट्स

7

लिनक्स माउंट कमांड पर स्वीकृत उत्तर के भीतर एक लूप डिवाइस बना देगा। पूर्ण डिस्क छवि को मानते हुए एक सही विभाजन तालिका है (जिसे आपकी कर्नेल समझने में सक्षम है), आप losetup(8)ऑफसेट की गणना की परेशानी को बचाने के लिए सीधे उपयोग करना पसंद कर सकते हैं । इसके अलावा अतिरिक्त उपकरणों की कोई आवश्यकता नहीं है जैसे kpartxकि किसी अन्य उत्तर में सुझाव दें । यह मूल रूप से निम्नलिखित के रूप में एक ही काम करेगा:

losetup -Prf sdb.imgछवि फ़ाइल के साथ पहले मुक्त लूप डिवाइस ( -f) को आसानी से ( ) के रूप में संबद्ध करेगा । विकल्प बलों गिरी इस पाश डिवाइस के विभाजन तालिका स्कैन करने के लिए और प्रत्येक विभाजन के लिए पाश उपकरणों का निर्माण करेगा।-rsdb.img-P

तो आपको कुछ ऐसा मिल सकता है:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

अब आप एक वांछित माउंटपॉइंट पर, निश्चित रूप से, प्रत्येक विभाजन को माउंट कर सकते हैं।

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

सब कुछ आसानी से रखना वैकल्पिक है, लेकिन बैकअप छवि के लिए एक अच्छी बात हो सकती है।

अद्यतन: -Pविकल्प 2012 में उपयोग-लाइनक्स -२.२१ के साथ जोड़ा गया था । इसलिए यह उस समय उपलब्ध नहीं था जब स्वीकृत उत्तर लिखा गया था। यह भी ध्यान दें और अन्य उत्तर लिनक्स के लिए विशिष्ट हैं। OpenBSD और NetBSD द्वारा प्रबंधित vnode डिस्क vnconfig(8)और FreeBSD द्वारा प्रबंधित स्मृति डिस्क हैं mdconfig(8)


2

वैकल्पिक रूप से, आप नामक एक अच्छा उपकरण का उपयोग कर सकते हैं kpartx। मैन पेज से:

kpartx - पार्टीशन टेबल से डिवाइस मैप्स बनाएं

इसका मतलब यह है कि आप एक "छद्म डिवाइस" बना सकते हैं, डिवाइस विभाजन के साथ, img फ़ाइल से सही:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

फिर आप /dev/mapper/loop0p2उदाहरण के लिए माउंट कर सकते हैं , यदि आप छवि पर दूसरा विभाजन चाहते हैं।

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