Jeśli utworzę obraz dysku i skompresuję go za pomocą gzip / xz / etc, czy istnieje sposób na zamontowanie go bezpośrednio bez uprzedniej dekompresji?
Powiedz, że użyłem
sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz
jak mogę zamontować oryginalny obraz, nie tworząc najpierw nieskompresowanej kopii?
Lub użyłem
sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz
a dysk ma wiele partycji, czy byłoby to trudniejsze?
Przy nieskompresowanym obrazie całego dysku użycie kpartx
lub nowsza wersja losetup
z jego -P
flagą powinny stworzyć pętlę dla każdej partycji.
Ale czy istnieje sposób na zamontowanie / losetup / odczytanie skompresowanego obrazu?
Jeśli to nie zadziała dla gzip / xz, czy istnieje jakakolwiek metoda kompresji, która by działała?
Uwaga dotycząca duplikatu Q
Aktualnie sugerowany duplikat
- Zamontuj pojedynczą partycję z obrazu całego dysku (urządzenia) , będąc jednocześnie doskonałym użytecznym Q
NIE WYKORZYSTUJE KOMPRESJI i NIE JEST DUPLIKATEM .
mount
sam nie zamontuje skompresowanego obrazu.
źródło
Odpowiedzi:
Możesz użyć
squashfs
do kompresji obrazów dysków, a następnie ich zamontowania.Utwórz obraz dysku
Jeśli nie masz jeszcze obrazu dysku, użyj go,
dd
aby go utworzyć:Skompresuj obraz za pomocą squashfs
Zainstaluj
squashfs
:Skompresuj obraz:
Lub Streamuj kompresję (nie potrzebujesz tymczasowego pliku dd)
Komplementy dla terminatora14 na UbuntuForums.org . Definicje / objaśnienia:
empty-dir
- „źródło” reż. Zasadniczo w naszym przypadku, po prostu pusty katalog, aby spełnić wejściowy format arg mksquashfssquash.img
- miejsce docelowe i nazwa pliku wyjściowego pliku squashfssda_backup.img
- nazwa kopii zapasowej dd WEWNĄTRZ pliku squashfsf
- określa, że sda_backup.img jest zwykłym plikiem (w przeciwieństwie do katalogu, urządzenia blokowego lub urządzenia char)444
- uprawnienia do pliku sda_backup.img wewnątrz obrazu squashfsroot root
- UID i GID dla pliku sda_backup.img wewnątrz obrazu squashfs. Można podać według liczb dziesiętnych lub według nazwydd if=/dev/sda bs=4M
- polecenie dd użyte do odczytu urządzenia, którego kopię zapasową chcemy utworzyćZamontuj obraz
Najpierw zamontuj
squashfs
obraz:Spowoduje to wyświetlenie nieskompresowanego obrazu dysku do zamontowania:
Lub jeśli jest to pełny obraz dysku (podzielony na partycje), możesz użyć go,
losetup
aby dołączyć obraz dd do urządzenia pętlowego (ewentualnie opcjonalnego), a następniekpartx -a
lubpartprobe
znaleźć i oddzielić partycje do oddzielnych urządzeń, a nawetvgscan
/vgchange -ay
jeśli istnieje LVM.źródło
ro,noload
opcji:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
Udało mi się zdobyć serwer NBD, aby „obsługiwał” nieskompresowaną wersję pliku .gz lub .xz. Nie jestem pewien, czy musi on bardzo często czytać cały skompresowany plik (testowany dotychczas tylko z małymi plikami w pamięci RAM), ale przynajmniej działa bez konieczności wyodrębnienia całej nieskompresowanej kopii.
Wyświetlanie skompresowanego obrazu gd / xz „w locie”
Zainstaluj nbdkit i klienta
Utwórz plik demonstracyjny w stylu „dd” - pusty plik 50M z systemem plików ext i spakuj go (opcjonalnie tylko do testowania)
Następnie skompresuj za pomocą gzip lub xz
Uwaga:
xz
Opcja--block-size=16MiB
powinna zapewniać lepszą wydajność dostępu losowego, ale kosztem mniejszej kompresji (może 1%?). Zobacz opis wtyczki xz nbdkit .Uruchom serwer na obrazie COMPRESSED
lub dla xz
--no-fork
Informuje serwer „nie widelec w tle” co powoduje, że ewentualne komunikaty o błędach i zabijając go z CTRL-C jest trochę łatwiej.-v
może / pokaże zbyt wiele komunikatów o stanie, szczególnie podczas czytania.Uruchom klienta (w innym terminalu / oknie)
-nofork
Jest podobny do-no-fork
powyższego, ale mogę nie zabić klientowi CTRL-C,kill <pid>
lubsudo kill <pid>
. Zakończenie działania serwera za pomocą CTRL-C zatrzymało zarówno serwer, jak i klienta.Zauważ, że
/dev/nbd0
jest teraz identyczny z obrazem NIE SPRĘŻONYM/dev/nbd0
może być teraz używany podobnie jak nieskompresowany obraz; zamontowane, odczyt / kopiowaniedd
lub wykorzystaniekpartx
,partprobe
,vgscan
/vgchange
, itp!Dzięki Cristianowi Ciupitu na Unixowi i Linuksowi zajęło to trochę więcej czasu, aby znaleźć wtyczkę i wszystko połączyć.
źródło
nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xz
działało świetnie z tym samym poleceniem klientanbdkit 1.1.11
używa starego protokołu NBD, który różni się od nowego protokołu NBD, używanego wnbd-client 3.13
, ale możesz używać wersji klienta nbd przed 3.10, np.nbd-client 3.8 from Ubuntu precise 12.04 old LTS
[Używaj starych wersji tylko lokalnie dla bezpieczeństwa!]Oto mój sposób na zrobienie tego, ale nie znam tego odpowiednika na konsolę,
.iso
plik za pomocąDisk Image Mounter
.źródło
dd if=/dev/zero
i rolką do plików) i faktycznie dodaje on 362k danych (przypuszczam, że jest to narzut iso). Dzięki, pomysł jest na dobrej drodze