كيفية تحميل قسم واحد من ملف صورة يحتوي على أقسام متعددة على نظام Linux؟
-
07-07-2019 - |
سؤال
يحتوي ملف الصورة على جدول أقسام، ويحتوي على أقسام متعددة.
قد تكون أجهزة الاسترجاع ممكنة.
مواضيع ذات صلة:
المحلول
لنفترض أنه تم تعيين $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