압축 된 디스크 이미지를 마운트하는 방법은 무엇입니까?


12

나는 디스크 이미지를 만들 경우 압축 함께 GZIP / XZ / 등이 그것을 압축 해제 첫째 않고 직접 마운트하는 방법이 있나요?

내가 사용한 말

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

압축되지 않은 사본을 먼저 만들지 않고 원본 이미지를 마운트하려면 어떻게해야합니까?

또는 나는 사용했다

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

디스크에 여러 개의 파티션이 있다면 더 어려워 질까요?

전체 디스크의 압축되지 않은 이미지를 사용하면 kpartx최신 버전 losetup-P플래그를 사용하여 각 파티션마다 루프를 만들어야합니다.

그러나 압축 된 이미지를 마운트 / 설치 / 읽을 수있는 방법이 있습니까?

gzip / xz에서 작동하지 않으면 작동하는 압축 방법이 있습니까?


중복 Q에 대한 참고 사항

현재 제안 된 사본

DOES NOT USE COMPRESSIONIS NOT 중복 .

mount 압축 된 이미지 자체는 마운트하지 않습니다.


확실히 가능하다고 말할 수 있습니다. 그러나 지시 사항이 2 개의 외장 HDD에 있기 때문에 atm이 어떻게 작동하는지 말할 수 없으며 지금은 둘 다 액세스 할 수 없지만 작동한다는 것을 알려 드리고자합니다. 하나가있을 때 답을 얻을 것입니다 (그리고 그때까지 아무도 게시하지 않았습니다).
UTF-8


1
@ UTF-8 감사합니다. 참고로, 원래 목표는 거의 비어 있거나 쉽게 압축 가능한 데이터가 많은 드라이브 / 파티션의 소규모 백업을 만들고 추가 데이터를 많이 쓰거나 여유 공간이 없어도 읽을 수있는 것입니다
Xen2050


2
@ bodhi.zazen Pardon? 어쩌면 내가 명확히 마운트해야 하지 않습니다 이 Q가의 중복되지 않도록, 자동 압축 해제 이미지를 askubuntu.com/questions/69363이 (어쩌면 내가 희망없는 압축 해제, 농담을 놓친 에만 :) 대답
Xen2050

답변:


10

squashfs디스크 이미지를 압축 한 다음 마운트하는 데 사용할 수 있습니다 .

디스크 이미지 생성

디스크 이미지가없는 경우 디스크 이미지 dd를 만들려면 사용하십시오 .

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

squashfs로 이미지 압축

설치 squashfs:

apt-get install squashfs-tools

이미지를 압축하십시오.

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

또는 압축 스트리밍 (임시 dd 파일 필요 없음)

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

에 칭찬 UbuntuForums.org에서 terminator14 . 정의 / 설명 :

  • empty-dir- "소스"디렉토리. 우리의 경우 기본적으로 mksquashfs의 입력 인수 형식을 만족시키는 빈 디렉토리
  • squash.img -출력 squashfs 파일의 대상 및 파일 이름
  • sda_backup.img -squashfs 파일 내부의 dd 백업 이름
  • f -sda_backup.img가 일반 파일임을 지정합니다 (디렉토리, 블록 장치 또는 char 장치와 반대)
  • 444 -squashfs 이미지 내의 sda_backup.img 파일의 권한
  • root root-squashfs 이미지 내의 sda_backup.img 파일에 대한 UID 및 GID 십진수 또는 이름으로 지정할 수 있습니다
  • dd if=/dev/sda bs=4M -백업하려는 장치를 읽는 데 사용되는 dd 명령

이미지 마운트

먼저 squashfs이미지를 마운트하십시오 .

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

마운트 할 압축되지 않은 디스크 이미지가 표시됩니다.

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

그것은 전체 드라이브 이미지인지 아니면 사용할 수 있습니다 (분할) losetup다음 루프 장치 (아마도 옵션)과에 DD 이미지를 첨부 kpartx -a하거나 partprobe심지어 찾을 수 및 별도의 장치에 파티션을 분리하거나 vgscan/ vgchange -ayLVM이 있다면.


2
임시 일반 dd 파일이 필요하지 않도록 몇 가지 즉각적인 squashfs 정보를 추가했습니다. squashfs에 대한 훌륭한 답변은 파이프 친화적 인 xz / gz 형식을 수행하지 않습니다.
Xen2050

여러 파티션을 포함하는 전체 디스크 이미지로도 작동합니까?
friederbluemle

전체 디스크는 여기를 참조하십시오 : unix.stackexchange.com/questions/31669/…
HackerBoss

파일 시스템 유형에 따라 마운트하려면 다음 ro,noload과 같은 옵션 이 필요할 수 있습니다.mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss

7

압축되지 않은 버전의 .gz 또는 .xz 파일을 "보존"하도록 NBD 서버를 확보 할 수있었습니다. 압축 파일 전체를 매우 자주 읽어야하는지 확실하지 않지만 (램에서 작은 파일로 테스트 한 경우에만) 압축되지 않은 전체 사본을 추출하지 않고도 작동합니다.

gz / xz 압축 dd 이미지 "온더 플라이"보기

  1. nbdkit 및 클라이언트 설치

    apt install nbdkit nbd-client
    
  2. 데모 "dd"스타일 파일 만들기-ext 파일 시스템이있는 빈 50M 파일 및 압축 (테스트 전용)

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

    그런 다음 gzip 또는 xz로 압축하십시오.

    gzip -vk9 50m
    xz -v9k 50m
    

    참고 : xz옵션을 선택하면 --block-size=16MiB랜덤 액세스 성능이 향상되지만 압축률이 낮을 수 있습니다 (1 % 일 수 있음). nbdkit의 xz 플러그인 설명을 참조하십시오 .

  3. 압축 이미지에서 서버 실행

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

    또는 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
    

    --no-fork서버는 "배경으로 포크하지 마십시오" 라고 알려주 므로 가능한 오류 메시지를 확인하고 CTRL-C로 오류를 죽이는 것이 조금 더 쉽습니다.

    -v 특히 읽을 때 너무 많은 상태 메시지가 표시 될 수 있습니다.

  4. 클라이언트를 다른 터미널 / 창에서 실행

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

    -nofork유사하다 -no-fork위,하지만 난 수 없습니다 CTRL-C와 클라이언트를 죽이고, kill <pid>또는 sudo kill <pid>. CTRL-C를 사용하여 서버를 종료하면 서버와 클라이언트가 모두 중지되었습니다.

  5. /dev/nbd0압축되지 않은 이미지와 동일한 지 확인 하십시오.

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

    /dev/nbd0압축되지 않은 이미지처럼 사용할 수 있습니다. 읽기 / 장착으로 복사 dd또는 사용 kpartx, partprobe, vgscan/ vgchange, 등!

Unix & Linux의 Cristian Ciupitu 덕분에 플러그인을 찾고 모든 것을 함께 사용하려면 조금 더 파고 들었습니다.


Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xz에서도 동일한 클라이언트 명령으로 훌륭하게 작동했습니다
EkriirkE

우분투 주객 관계의 16.04 LTS는 일 nbdkit 1.1.11 에 사용 된 NBD 프로토콜, 새로운 NBD 프로토콜 다르다을 사용 nbd-client 3.13하지만 3.10 전에, 예를 들어 NBD-클라이언트 버전을 사용 ca를 nbd-client 3.8 from Ubuntu precise 12.04 old LTS[보안을 위해 로컬로만 사용 이전 버전을!]
user1742529

0

여기 내 방법이 있습니다. 콘솔에 해당하는 것을 알지 못합니다.

  • 폴더를 ISO로 압축하십시오. 여기에 이미지 설명을 입력하십시오
  • .iso파일을 마운트하십시오 Disk Image Mounter. 여기에 이미지 설명을 입력하십시오
  • 압축 된 iso를 풀지 않고 열었습니다. 여기에 이미지 설명을 입력하십시오

4
이 방법은 실제로 데이터를 압축 합니까? 압축을 사용하지 않는 일반 iso9660 이미지 (파일 롤러를 통해?)를 사용하는 것 같습니다. 나는 모든 0 dd if=/dev/zero과 파일 롤러 의 100MB 파일에서 시도했으며 실제로 362k의 데이터를 추가합니다 (상상 한 오버 헤드). 고마워, 아이디어는 올바른 길에있다
Xen2050

죄송하지만 압축 기술에 대해서는 전혀 모르지만 다른 압축 형식을 시도하면 파일 롤러로 목록을 나열 할 수도 있지만 해당 파일을 읽으려면 특정 파일 만 추출하면됩니다.
hellozee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.