Bagaimana cara me-mount image disk yang dikompresi?

12

Jika saya membuat image disk dan mengompresnya dengan gzip / xz / etc apakah ada cara untuk memasangnya secara langsung tanpa terlebih dahulu membuka kompres ?

Katakanlah saya sudah menggunakan

sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz

bagaimana saya bisa memasang gambar asli, tanpa membuat salinan terkompresi terlebih dahulu?

Atau saya sudah menggunakan

sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz

dan disk memiliki banyak partisi, apakah itu akan membuatnya lebih sulit?

Dengan gambar yang tidak terkompresi dari seluruh disk kemudian menggunakan kpartxatau versi yang lebih baru losetupdengan -Pflag itu harus membuat loop untuk setiap partisi.

Tetapi apakah ada cara untuk me-mount / losetup / membaca gambar yang dikompresi?

Jika itu tidak bekerja untuk gzip / xz, adakah metode kompresi yang cocok untuk ini?


Catatan tentang duplikat Q

Duplikat yang disarankan saat ini

JANGAN GUNAKAN KOMPRESI , DAN BUKAN DUPLIKAT .

mount tidak akan memasang gambar terkompresi dengan sendirinya.

Xen2050
sumber
Saya dapat memberitahu Anda bahwa itu pasti mungkin. Tapi saya tidak bisa memberi tahu Anda bagaimana atm karena instruksinya ada pada 2 HDD eksternal dan saat ini saya tidak memiliki akses tetapi saya ingin memberi tahu Anda bahwa itu berfungsi. Saya akan kembali dengan jawaban ketika saya punya (dan tidak ada orang lain yang mempostingnya sampai saat itu).
UTF-8
1
@ UTF-8 Sangat menggembirakan, terima kasih. FYI, tujuan awalnya adalah untuk membuat cadangan lebih kecil dari drive / partisi yang hampir kosong atau memiliki banyak data yang mudah dikompresi, dan dapat membacanya tanpa menulis BANYAK data tambahan atau membutuhkan banyak ruang kosong untuk mengekstraknya
Xen2050
Lihat juga major.io/2010/12/14/…
Panther
2
@ bodhi.zazen Pardon? Mungkin saya harus mengklarifikasi, mount tidak secara otomatis membuka kompresi gambar, jadi Q ini bukan duplikat askubuntu.com/questions/69363 (mungkin saya melewatkan lelucon, semoga uncompressing bukan satu - satunya jawaban :)
Xen2050

Jawaban:

10

Anda dapat menggunakannya squashfsuntuk mengompres gambar disk dan kemudian memasangnya.

Buat gambar disk

Jika Anda belum memiliki image disk, gunakan dduntuk membuatnya:

dd if=/dev/sda1 of=/tmp/sda1.img bs=4M

Kompres gambar dengan squashfs

Pasang squashfs:

apt-get install squashfs-tools

Kompres gambar:

mksquashfs /tmp/sda1.img /tmp/sda1.squash.img

Atau Alirkan kompresi (tidak perlu file dd sementara)

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

Pujian untuk terminator14 di UbuntuForums.org . Definisi / Penjelasan:

  • empty-dir- dir "sumber". Pada dasarnya dalam kasus kami, hanya sebuah dir kosong untuk memenuhi format input arg mksquashfs
  • squash.img - tujuan dan nama file dari file squashfs keluaran
  • sda_backup.img - nama cadangan dd DI DALAM file squashfs
  • f - menetapkan bahwa sda_backup.img adalah file biasa (sebagai lawan dari direktori, perangkat blok, atau perangkat char)
  • 444 - izin file sda_backup.img di dalam gambar squashfs
  • root root- UID dan GID untuk file sda_backup.img di dalam gambar squashfs. Dapat ditentukan dengan angka desimal, atau dengan nama
  • dd if=/dev/sda bs=4M - perintah dd digunakan untuk membaca perangkat yang ingin kita buat cadangannya

Pasang gambar

Pertama-tama pasang squashfsgambar:

mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash

Ini akan menampilkan gambar disk yang tidak dikompresi untuk Anda pasang:

mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1

Atau jika itu adalah gambar drive penuh (dipartisi) yang dapat Anda gunakan losetupuntuk melampirkan gambar dd ke perangkat loop (mungkin opsional) dan kemudian kpartx -aatau partprobeuntuk menemukan & memisahkan partisi ke perangkat yang terpisah, atau bahkan vgscan/ vgchange -ayjika ada LVM.

Eborbob
sumber
2
Saya menambahkan beberapa info squashfs on-the-fly, untuk menghindari kebutuhan file dd polos sementara. Jawaban hebat dengan squashfs, hanya saja tidak melakukan format xz / gz yang lebih ramah-pipa
Xen2050
Akankah itu bekerja dengan image disk penuh yang berisi banyak partisi juga?
friederbluemle
Lihat di sini untuk disk lengkap: unix.stackexchange.com/questions/31669/…
HackerBoss
Bergantung pada tipe sistem file, pemasangan mungkin memerlukan ro,noloadopsi, seperti:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss
7

Saya bisa mendapatkan server NBD untuk "melayani" versi yang tidak dikompresi dari file .gz atau .xz. Saya tidak yakin apakah itu harus membaca seluruh file terkompresi sangat sering (hanya diuji sejauh ini dengan file kecil di ram) tetapi setidaknya itu berfungsi tanpa harus mengekstrak seluruh salinan un-kompresi.

Melihat gambar gz / xz Terkompresi dd "on-the-fly"

  1. Instal nbdkit & klien

    apt install nbdkit nbd-client
    
  2. Buat demo "dd" style file - file 50M kosong dengan sistem file ext & zip (Opsional untuk pengujian saja)

    fallocate -l 50M 50m
    mkfs.ext3 -v 50m
    

    Kemudian kompres dengan gzip atau xz

    gzip -vk9 50m
    xz -v9k 50m
    

    Catatan: xzPilihan --block-size=16MiBharus memberikan kinerja akses acak yang lebih baik, tetapi dengan mengorbankan kompresi lebih sedikit (mungkin 1%?). Lihat deskripsi plugin xz nbdkit .

  3. Jalankan server pada gambar COMPRESSED

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
    

    atau untuk xz

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-xz-plugin.so file=~/Downloads/50m.xz
    

    The --no-forkmemberitahu server "Jangan garpu ke latar belakang" sehingga melihat kemungkinan pesan kesalahan & membunuh dengan CTRL-C sedikit lebih mudah.

    -v mungkin / akan menampilkan terlalu banyak pesan status, terutama saat membaca.

  4. Jalankan klien (di terminal / jendela lain)

    sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
    

    The -noforkmirip dengan -no-forkdi atas, tapi aku bisa tidak membunuh klien dengan CTRL-C, kill <pid>atau sudo kill <pid>. Mengakhiri server dengan CTRL-C menghentikan kedua server & klien.

  5. Perhatikan bahwa /dev/nbd0sekarang identik dengan gambar UN-COMPRESSED

    $ sudo diff -s /dev/nbd0 ~/Downloads/50m
    Files /dev/nbd0 and /home/user/Downloads/50m are identical
    

    /dev/nbd0sekarang dapat digunakan seperti gambar yang tidak dikompresi; mount, membaca / menyalin dengan dd, atau penggunaan kpartx, partprobe, vgscan/ vgchange, dll!

Terima kasih kepada Cristian Ciupitu di Unix & Linux , meskipun butuh sedikit lebih banyak penggalian untuk menemukan plugin & membuat semuanya berjalan bersama.

Xen2050
sumber
Pada Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xzbekerja dengan baik dengan perintah klien yang sama
EkriirkE
Di Ubuntu xenial 16.04 LTS nbdkit 1.1.11 menggunakan protokol NBD lama, yang berbeda dari protokol NBD baru, digunakan nbd-client 3.13, tetapi Anda dapat menggunakan versi nbd-klien sebelum 3.10, misalnya nbd-client 3.8 from Ubuntu precise 12.04 old LTS[gunakan versi lama hanya secara lokal untuk keamanan!]
user1742529
0

Ini adalah cara saya melakukannya, tidak tahu konsol yang setara dengan ini,

  • Kompres folder menjadi iso. masukkan deskripsi gambar di sini
  • Pasang .isofile dengan Disk Image Mounter. masukkan deskripsi gambar di sini
  • Tada saya membuka iso terkompresi tanpa membongkar itu. masukkan deskripsi gambar di sini
halo
sumber
4
Apakah metode ini benar-benar memampatkan data? Sepertinya menggunakan gambar iso9660 biasa (via file-roller?), Yang tidak menggunakan kompresi. Saya mencobanya pada file 100MB semua nol ( dd if=/dev/zerodan file-roller) dan itu benar-benar menambahkan 362k data (iso overhead kurasa). Terima kasih, idenya ada di jalur yang benar
Xen2050
Maaf tapi saya tidak punya ide tentang teknologi kompresi tetapi jika Anda mencoba format kompresi lainnya, saya yakin Anda juga dapat mencantumkannya dengan file-roller, tetapi jika Anda ingin membaca file itu, Anda hanya perlu mengekstrak file spesifik itu.
hellozee