ฉันจะติดตั้ง "img" ที่สร้างด้วย / bin / dd ของฮาร์ดไดรฟ์ได้อย่างไร


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 : ID = 0x12, starthead 1, สตาร์ทเตอร์ 63 , 10233342 ภาค พาร์ติชัน 2 : ID = 0xc, active, starthead 0, startsector 10233405 , 72517410 เซกเตอร์; พาร์ติชัน 3 : ID = 0xc, starthead 0, startector 82750815 , 73545570 เซ็กเตอร์, รหัสออฟเซ็ต 0xc0

Partition      Startsector
1 63
2 10233405
3 82750815

ในการติดตั้งพาร์ทิชันเดียวที่X เป็นstartsectorที่พาร์ทิชันการทำงาน:

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
Runium

การชี้แจงเพิ่มเติม - คุณสามารถรับจำนวนเซ็กเตอร์ 512 ไบต์ได้โดยการเพิ่มตัวเลือก -u ในคำสั่งนั้นfdisk -u -l sdb.img
Aaron Mason

ถ้ารุ่นของคุณfileเป็นช่างพูดน้อยลงโดยค่าเริ่มต้นลองเพิ่ม-kสวิทช์ที่จะได้รับชนิดของการส่งออกแสดงในคำตอบ - file -k FILENAME.imgเช่นนี้
Christian Pietsch

7

บนคำสั่ง Linux mount ภายในคำตอบที่ยอมรับจะสร้างอุปกรณ์ลูป สมมติว่าอิมเมจของดิสก์แบบเต็มมีตารางพาร์ติชันที่ถูกต้อง (ซึ่งเคอร์เนลของคุณสามารถเข้าใจได้) คุณอาจต้องการใช้losetup(8)โดยตรงเพื่อช่วยให้คุณไม่ต้องวุ่นวายกับการคำนวณออฟเซ็ต นอกจากนี้ยังมีความจำเป็นต้องใช้เครื่องมือพิเศษที่ไม่เหมือนใครkpartxเป็นแนะนำในอื่น ๆคำตอบ โดยพื้นฐานแล้วจะทำสิ่งเดียวกันดังต่อไปนี้:

losetup -Prf sdb.imgจะเชื่อมโยงอุปกรณ์ห่วงแรกฟรี ( -f) ในขณะที่อ่านได้อย่างเดียว ( -r) sdb.imgกับไฟล์ภาพ -Pกองกำลังตัวเลือก kernel เพื่อสแกนตารางพาร์ทิชันของอุปกรณ์ห่วงนี้และจะสร้างอุปกรณ์ห่วงสำหรับแต่ละพาร์ทิชัน

ดังนั้นคุณอาจได้รับสิ่งที่ชอบ:

$ 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ตัวเลือกถูกเพิ่มเข้ามาด้วย util-linux-2.21 ในปี 2012 ดังนั้นจึงไม่สามารถใช้ได้ในเวลาที่คำตอบที่เขียนนั้นได้รับการยอมรับ นอกจากนี้โปรดสังเกตสิ่งนี้และคำตอบอื่น ๆ เฉพาะสำหรับ linux 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ตัวอย่างเช่นถ้าคุณต้องการพาร์ติชันที่สองในภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.