كيفية تحميل قسم واحد من ملف صورة يحتوي على أقسام متعددة على نظام Linux؟

StackOverflow https://stackoverflow.com/questions/1419489

سؤال

يحتوي ملف الصورة على جدول أقسام، ويحتوي على أقسام متعددة.

قد تكون أجهزة الاسترجاع ممكنة.

مواضيع ذات صلة:

هل كانت مفيدة؟

المحلول

لنفترض أنه تم تعيين $IMAGE على المسار إلى ملف الصورة الخاص بك.يمكنك كتابة نص صغير باستخدام

fdisk -u sectors -l $IMAGE

للحصول على قائمة الأقسام الموجودة داخل الصورة.ثم استخدم سلسلة من

mount -o ro,loop,offset=$OFFSET -t auto $IMAGE /media/$DEST

حيث يتم حساب الإزاحة يعني المعلومات الواردة من fdisk (قطاع البداية * حجم القطاع بالبايت) و$DEST اسم فريد لكل قسم.

هذا ليس الحل المباشر ولكني آمل أن يكون هناك مؤشر جيد حول كيفية تحقيق ذلك.إذا قمت بالمهمة مرة واحدة، فستكون لديك بداية صغيرة لطيفة لمجموعة أدوات الطب الشرعي!​​​​​​​​​​​​​​​​​​​​​​​

نصائح أخرى

يمكنك القيام بذلك بهذه الطريقة، دون الكثير من المتاعب:

# kpartx -v -a logging-test.img 
add map loop0p1 (251:0): 0 497664 linear /dev/loop0 2048
add map loop0p2 (251:1): 0 66605058 linear /dev/loop0 501758
add map loop0p5 (251:2): 0 66605056 251:1 2
# ls /dev/mapper/
control  loop0p1  loop0p2  loop0p5
# mount /dev/mapper/loop0p1 /mnt/test
# mount  | grep test
/dev/mapper/loop0p1 on /mnt/test type ext2 (rw)
#

ولإزالة جهاز الحلقة بعد الانتهاء:

# kpartx -v -d logging-test.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0
#

إذا كان لديك الإصدار 2.21 من util-linux أو إصدار أحدث، فيمكنك الآن القيام بذلك باستخدام برنامج Lostup.استخدم ال -P (--partscan) لقراءة جدول الأقسام وإنشاء عقد جهاز لكل قسم:

# losetup --show -f -P test.img
/dev/loop0

# ls /dev/loop0*
/dev/loop0
/dev/loop0p1
/dev/loop0p2

# mount /dev/loop0p1 /mnt/tmp

losetup -P أتمتة

losetup -P هي أفضل طريقة تبدأ في Ubuntu 16.04 كما هو مذكور في https://stackoverflow.com/a/15200862/895245 ، وهنا وظائف لأتمتة إذا كان كذلك.الاستخدام:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

مصدر:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

حسنًا، هذا السؤال قديم منذ زمن طويل، ولكن فقط من أجل الاكتمال: هذه هنا يبدو أسهل بكثير بالنسبة لي.

يقتبس:

rmmod loop
modprobe loop max_part=63
losetup -f /path/to/your/disk/image.raw
mount /dev/loop0p1 /mnt/path

المزيد من الأتمتة للإجابات السابقة التي كانت رائعة.

لتبسيط المهمة بشكل أكبر (والتي تكون مطلوبة إذا كنت تقوم بها كثيرًا)، يمكنك استخدام البرنامج النصي الخاص بي mountimg لفعل كل شيء من أجلك.فقط احصل عليه من https://github.com/AlexanderAmelkin/mountimgواستخدام مثل هذا:

mountimg disk_image.img $PARTNO /mnt/mountpoint

يمكنك أيضًا تحديد نوع نظام الملفات وأي خيارات تثبيت إضافية أخرى إذا أردت:

mountimg disk_image.img $PARTNO /mnt/mountpoint -t vfat -o codepage=866,iocharset=utf-8

عندما تنتهي من التقسيم، ببساطة umount هو - هي:

umount /mnt/mountpoint
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top