Memasang banyak file img sebagai perangkat satu putaran

19

Apakah ada cara untuk mengambil file img disk yang dipecah menjadi beberapa bagian dan memasangnya sebagai perangkat loop tunggal?

MageProspero
sumber
1
Bagaimana itu rusak? Format apa itu? Mungkin ada beberapa sihir fuse untuk ini jika ini format khusus, tapi saya kira jawabannya adalah menyatukan mereka!
Caleb
Saya dibatasi oleh format perangkat untuk file yang kurang dari 4 gigs. Saya memiliki akses root ke perangkat. Apakah ada sesuatu yang saya bisa dengan LVM
MageProspero

Jawaban:

16

Saya tidak berpikir Anda bisa melakukannya di tempat tetapi jika Anda memiliki cukup ruang, ini akan berfungsi:

# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k

# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01

# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1

# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>

# Mount the new filesystem
mount /dev/md0 /mnt

Anda tidak bisa begitu saja membuat array RAID dari file asli karena disk RAID memiliki header spesifik tempat jumlah disk, level RAID, dll disimpan. Jika Anda melakukannya, bagian dari file asli Anda akan ditimpa.

Anda dapat menggunakan mdadm --builduntuk membuat array tanpa metadata tetapi kemudian Anda benar-benar harus membuat cadangan terlebih dahulu. Atau jika mount baca-saja sudah cukup:

losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt

Mengapa Anda ingin melakukan ini? Jika sistem file Anda tidak dapat menangani file> 4GB, Anda hanya perlu beralih ke file yang waras.

stribika
sumber
Mungkin bisa melakukannya dengan device mapper juga, tetapi hal di atas lebih mudah.
Wodin
Maaf telah menerima begitu lama, jawaban yang sangat bagus. Saya tidak akan melakukan ini dalam keadaan normal, ini lebih merupakan pertanyaan mode petualangan.
MageProspero
2
Anda mungkin ingin menggunakan truncatealih-alih ddkarena jauh lebih cepat (itu tidak melakukan penulisan aktual ke FS tetapi hanya mengalokasikan inode dan menandai file sebagai hanya berisi lubang).
Maciej Piechotka
Bagus. Saya tidak tahu itu.
stribika
Dari pengalaman, jika Anda menggunakan cadangan berbasis cloud berkapasitas besar atau solusi sinkronisasi seperti CrashPlan atau Google Drive berbayar, itu ide yang sangat, sangat baik untuk menggunakan file split kecil alih-alih file tunggal besar. Jika terjadi pengunduhan file yang gagal, Anda hanya perlu mengunduh ulang, katakanlah, 1 GB alih-alih keseluruhan 100 GB.
RAKK
3

Untuk memasang image disk split (atau gambar partisi), Anda harus menggunakan affusedari afftools yang saat ini dikelola di sini: https://github.com/sshock/AFFLIBv3

Jadi, jika Anda memiliki file, bagi menjadi beberapa subfile test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009

maka Anda dapat bergabung dengan mereka secara virtual affuse

# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw

(ini menggabungkan semua file bersama-sama dimulai dengan file 000, lalu 001, 002, ...)

Dan kemudian pasang gambar

mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test

Penggunaannya dijelaskan di sini dan beberapa contoh di sini . Halaman manual juga tersedia setelah dikompilasi dan diinstal, atau di sini .

PS: Bagi saya affusehanya berfungsi jika file split memiliki ukuran yang merupakan kelipatan dari 512 byte.

erik
sumber
4
Saya baru saja mencoba metode ini. Ini memiliki peringatan utama: itu hanya akan memungkinkan Anda untuk me-mount gambar Anda sebagai hanya baca.
RAKK
Bekerja dengan baik selama Anda hanya memiliki ratusan dan bukan ribuan potongan file. Mungkin lebih baik menggunakan mdadm untuk membuat partisi serangan linier: unix.stackexchange.com/a/98779/22709
Jay Taylor
1

Anda dapat menulis ekstensi perangkat penyimpanan blok Anda sendiri (pikirkan ekstensi seperti sekering) dan lakukan pencarian dengan bergantung pada apa alamatnya.

Di sini Anda dapat menemukan contoh cara menggunakan sekering https://github.com/libfuse/python-fuse/blob/master/example/hello.py

test30
sumber
terima kasih saya benar-benar harus membungkus kepalaku di sekitar lingkaran meta suatu hari
MageProspero
0

Hal terdekat yang saya tahu sejauh ini untuk solusi adalah membuat VM VMware. Anda memulai CD live Linux seperti Rescatux atau Knoppix, Anda membuat folder bersama SMB di komputer host Anda, Anda me-mount share SMB pada VM Anda, dan kemudian Anda ddgambar ke HD virtual. VMware secara default menyimpan gambar disk-nya sebagai file-file terpecah, jadi ini adalah hal yang paling dekat dengan membaca secara langsung gambar disk dibagi menjadi beberapa file.

Kemudian, jika Anda ingin mengakses file dari komputer host Anda, Anda dapat mencoba menambahkan HD virtual kedua ke gambar dan menyalin file di sana. Kemudian Anda mengatur folder bersama SMB pada VM dan menghubungkannya dari host Anda. Dengan cara ini Anda dapat, misalnya, melanggar batas file 4 GB FAT32 jika Anda menggunakan iPod Classic (yang hanya menimbun fat32), atau kartu SD ponsel cerdas Anda (biasanya Anda harus menginstal ROM kustom untuk memesan untuk menggunakan Ext3 atau NTFS pada penyimpanan eksternal, untuk ini Anda memerlukan ponsel dari pabrikan populer seperti Samsung atau Motorola, jadi jika Anda memiliki ponsel cerdas China Anda bingung).

Ini memang bukan solusi yang efisien, tetapi karena saya dibatasi oleh tidak dapat menggunakan FS selain fat32 pada iPod Classic saya atau smartphone Samsung saya dengan stock ROM, saya telah menjelajahi hampir seluruh internet di internet. masa lalu dan masih belum dapat menemukan solusi yang efisien untuk ini. Saya bahkan mungkin harus menulisnya sendiri.

PS: Lupa menyebutkan, bahwa jika Anda menggunakan Windows ini mungkin satu-satunya cara untuk melakukan ini.

RAKK
sumber
Sudah lama sejak saya mengunjungi masalah ini. Saya masih memilikinya. Saya juga memilikinya persis sama dengan alasan Anda melakukannya. Saya ingin tahu apakah Anda dapat memunculkan proses yang memiliki sistem file kustom sendiri, jujur ​​saya ingin mencoba ini. Saya tahu saya bisa melakukannya dalam simpul. Saya telah berhasil membawa penerjemah ke root. Saya tidak tahu apakah ini menyelesaikan masalah Anda jika saya lakukan. Di galaksi samsung perangkat keras saya, ini tidak masalah. Katakan apakah Anda ingin mengerjakan sesuatu untuk masalah ini bersama-sama.
MageProspero
-1

Di bawah BSD Anda dapat menggunakan opsi union untuk melakukan mount. Di Linux, Anda dapat mencoba UnionFS.

julienlf
sumber
2
Ini sepertinya tidak relevan. Apakah Anda salah membaca pertanyaan?
Gilles 'SANGAT berhenti menjadi jahat'