Làm thế nào để gắn một hình ảnh đĩa nén?


10

Nếu tôi tạo một hình ảnh đĩa và nén nó bằng gzip / xz / etc thì có cách nào để gắn nó trực tiếp mà không cần giải nén nó trước không?

Nói rằng tôi đã sử dụng

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

Làm thế nào tôi có thể gắn ảnh gốc mà không tạo bản sao không nén trước?

Hoặc tôi đã sử dụng

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

và đĩa có nhiều phân vùng, điều đó có làm cho nó khó hơn không?

Với một hình ảnh không nén của toàn bộ đĩa sau đó sử dụng kpartxhoặc các phiên bản mới hơn losetupvới -Pcờ của nó sẽ tạo ra một vòng lặp cho mỗi phân vùng.

Nhưng có cách nào để gắn kết / losetup / đọc ảnh nén không?

Nếu nó không hoạt động cho gzip / xz, có phương pháp nén nào sẽ hoạt động không?


Lưu ý về trùng lặp Q

Bản sao hiện được đề xuất

KHÔNG SỬ DỤNG NỀN TẢNG , VÀ KHÔNG PHẢI LÀ L DUI .

mount sẽ không tự gắn một hình ảnh nén.


Tôi có thể nói với bạn rằng nó chắc chắn là có thể. Nhưng tôi không thể cho bạn biết atm vì các hướng dẫn trên 2 ổ cứng gắn ngoài và ngay bây giờ tôi không có quyền truy cập nhưng tôi muốn cho bạn biết rằng nó hoạt động. Tôi sẽ trở lại với một câu trả lời khi tôi có một (và không ai khác đăng nó cho đến khi đó).
UTF-8


1
@ UTF-8 Điều đó thật đáng khích lệ, cảm ơn. FYI, mục tiêu ban đầu là tạo một bản sao lưu nhỏ hơn của ổ đĩa / phân vùng gần như trống rỗng hoặc có nhiều dữ liệu có thể nén dễ dàng và có thể đọc nó mà không cần viết RẤT NHIỀU dữ liệu bổ sung hoặc cần một tấn dung lượng trống để trích xuất nó
Xen2050


1
@ bồ đề.zazen Xin lỗi? Có lẽ tôi nên làm rõ, mount không tự động giải nén hình ảnh, vì vậy Q này không phải là bản sao của Askubfox.com/questions/69363 (có thể tôi đã bỏ lỡ trò đùa, hy vọng giải nén không phải là câu trả lời duy nhất :)
Xen2050

Câu trả lời:


9

Bạn có thể sử dụng squashfsđể nén hình ảnh đĩa và sau đó gắn kết chúng.

Tạo hình ảnh đĩa

Nếu bạn chưa có hình ảnh đĩa, hãy sử dụng ddđể tạo một hình ảnh :

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

Nén hình ảnh bằng squashfs

Cài đặt squashfs:

apt-get install squashfs-tools

Nén hình ảnh:

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

Hoặc Truyền phát nén (không cần tệp dd tạm thời)

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

Khen ngợi cho terminator14 tại UbuntuForums.org . Định nghĩa / Giải thích:

  • empty-dir- "nguồn" dir. Về cơ bản trong trường hợp của chúng tôi, chỉ cần một thư mục trống để đáp ứng định dạng arg đầu vào của mksquashfs
  • squash.img - đích và tên tệp của tệp squashfs đầu ra
  • sda_backup.img - tên của bản sao lưu dd TRONG tập tin squashfs
  • f - chỉ định rằng sda_backup.img là một tệp thông thường (trái ngược với thư mục, thiết bị chặn hoặc thiết bị char)
  • 444 - quyền của tệp sda_backup.img bên trong hình ảnh squashfs
  • root root- UID và GID cho tệp sda_backup.img bên trong hình ảnh squashfs. Có thể được chỉ định bằng số thập phân hoặc theo tên
  • dd if=/dev/sda bs=4M - lệnh dd được sử dụng để đọc thiết bị mà chúng tôi muốn sao lưu

Gắn kết hình ảnh

Đầu tiên gắn squashfshình ảnh:

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

Điều này sẽ hiển thị hình ảnh đĩa chưa nén để bạn gắn kết:

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

Hoặc nếu đó là hình ảnh ổ đĩa đầy đủ (được phân vùng), bạn có thể sử dụng losetupđể gắn hình ảnh dd vào thiết bị lặp (có thể là tùy chọn) và sau đó kpartx -ahoặc partprobetìm & tách các phân vùng thành các thiết bị riêng biệt hoặc thậm chí vgscan/ vgchange -aynếu có LVM.


2
Tôi đã thêm một số thông tin squashfs nhanh chóng, để tránh cần một tệp dd đơn giản tạm thời. Câu trả lời tuyệt vời với squashfs, chỉ không làm các định dạng xz / gz thân thiện với đường ống hơn
Xen2050

Điều đó bằng cách nào đó sẽ làm việc với một hình ảnh đĩa đầy đủ chứa nhiều phân vùng?
Friederbluemle

6

Tôi đã có thể có được một máy chủ NBD để "phục vụ" một phiên bản chưa nén của tệp .gz hoặc .xz. Tôi không chắc chắn liệu nó có phải thường xuyên đọc toàn bộ tệp nén hay không (chỉ được thử nghiệm cho đến nay với các tệp nhỏ trong ram) nhưng ít nhất nó vẫn hoạt động mà không phải trích xuất toàn bộ bản sao chưa nén.

Xem hình ảnh dd nén gz / xz "đang hoạt động"

  1. Cài đặt nbdkit & client

    apt install nbdkit nbd-client
    
  2. Tạo tệp kiểu "dd" demo - một tệp 50M trống với hệ thống tệp mở rộng & nén tệp (Chỉ tùy chọn để thử nghiệm)

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

    Sau đó nén bằng gzip hoặc xz

    gzip -vk9 50m
    xz -v9k 50m
    

    Lưu ý: Một xztùy chọn --block-size=16MiBnên cung cấp hiệu suất truy cập ngẫu nhiên tốt hơn, nhưng với chi phí nén ít hơn (có thể là 1%?). Xem mô tả plugin xz của nbdkit .

  3. Chạy máy chủ trên hình ảnh 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
    

    hoặc cho 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
    

    Thông báo --no-forkcho máy chủ "Đừng rẽ vào nền" để thấy các thông báo lỗi có thể xảy ra và tiêu diệt nó bằng CTRL-C dễ dàng hơn một chút.

    -v có thể / sẽ hiển thị quá nhiều thông điệp trạng thái, đặc biệt là khi đọc.

  4. Chạy máy khách (trong một thiết bị đầu cuối / cửa sổ khác)

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

    Tương -noforktự như -no-forktrên, nhưng tôi không thể giết máy khách bằng CTRL-C kill <pid>, hoặc sudo kill <pid>. Kết thúc máy chủ bằng CTRL-C đã dừng cả máy chủ và máy khách.

  5. Quan sát rằng /dev/nbd0bây giờ giống hệt với hình ảnh UN-COMPRESSED

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

    /dev/nbd0bây giờ có thể được sử dụng giống như hình ảnh không nén; gắn kết, đọc / sao chép với dd, hoặc sử dụng kpartx, partprobe, vgscan/ vgchange, vv!

Cảm ơn Cristian Ciupitu trên Unix & Linux , mặc dù phải mất thêm một chút công sức để tìm plugin và kết nối mọi thứ lại với nhau.


Trên Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xzhoạt động rất tốt với cùng một lệnh khách hàng
EkriirkE

Trên Ubuntu xenial 16.04 LTS nbdkit 1.1.11 sử dụng giao thức NBD cũ, khác với giao thức NBD mới, được sử dụng nbd-client 3.13, nhưng bạn sử dụng phiên bản nbd-client trước 3.10, ví dụ: nbd-client 3.8 from Ubuntu precise 12.04 old LTS[chỉ sử dụng các phiên bản cũ để bảo mật!]
user1742529

0

Đây là cách làm của tôi, không biết giao diện điều khiển tương đương với điều này, mặc dù,

  • Nén thư mục vào một iso. nhập mô tả hình ảnh ở đây
  • Gắn .isotập tin với Disk Image Mounter. nhập mô tả hình ảnh ở đây
  • Tada tôi mở iso nén mà không giải nén nó. nhập mô tả hình ảnh ở đây

4
Liệu phương pháp này thực sự nén dữ liệu? Có vẻ như nó sử dụng một hình ảnh iso9660 đơn giản (thông qua con lăn tệp?), Không sử dụng nén. Tôi đã thử nó trên một tệp 100 MB của tất cả các số 0 ( dd if=/dev/zerovà con lăn tệp) và nó thực sự bổ sung 362k dữ liệu (giả sử là tôi sử dụng). Dù vậy, cảm ơn, ý tưởng đã đi đúng hướng
Xen2050

Xin lỗi nhưng tôi không có ý tưởng nào về các công nghệ nén nhưng nếu bạn thử bất kỳ định dạng nén nào khác, tôi cá là bạn cũng có thể liệt kê nó với con lăn tệp, nhưng nếu bạn muốn đọc tệp đó, bạn chỉ cần giải nén tệp cụ thể đó.
xin chào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.