Як змонтувати зображення стисненого диска?


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

Наразі запропонований дублікат

НЕ ВИКОРИСТОВУЄТЬСЯ КОМПРЕСІЮ , І НЕ ДУПЛІКАТ .

mount не змонтує стиснене зображення самостійно.


Я можу вам сказати, що це однозначно можливо. Але я не можу сказати вам, як атм, тому що інструкції є на 2 зовнішніх жорстких дисках, і зараз я не маю доступу до жодного, але хочу повідомити вам, що він працює. Я повернусь із відповіддю, коли у мене є такий (і до цього ніхто більше не публікував).
UTF-8,


1
@ UTF-8 Це обнадійливо, дякую. FYI, первісна мета - зробити меншу резервну копію диска / розділу, який майже порожній або має багато легко стислимих даних, і мати можливість їх читати, не записуючи багато зайвих даних або не потребуючи тонни вільного місця для його вилучення
Xen2050

Дивіться також major.io/2010/12/14/…
Пантера

2
@ bodhi.zazen Пробачення? Можливо, я повинен уточнити, що монтаж не автоматично розпаковує зображення, тому цей Q не є дублікатом askubuntu.com/questions/69363 (можливо, я пропустив жарт, сподіваюсь, що
стискання

Відповіді:


10

Ви можете використовувати squashfsдля стиснення образів диска, а потім їх монтажу.

Створіть образ диска

Якщо у вас ще немає образу диска, використовуйте його ddдля створення:

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

Стисніть зображення за допомогою кабачків

Встановити 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'

Компліменти термінатору14 на UbuntuForums.org . Визначення / Пояснення:

  • empty-dir- "джерело" реж. В основному, в нашому випадку просто порожній редактор для задоволення вхідного аргументу mksquashfs
  • squash.img - призначення та назву вихідного файлу squashfs
  • sda_backup.img - ім'я резервної копії DD ВНУТРІ файл файлу squashfs
  • f - визначає, що sda_backup.img є звичайним файлом (на відміну від каталогу, блокового пристрою чи пристрою char)
  • 444 - дозволи файлу sda_backup.img всередині зображення squashfs
  • root root- UID та GID для файлу sda_backup.img всередині зображення squashfs. Можна вказати десятковими числами або назвою
  • 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 -ayякщо є LVM.


2
Я додав деяку інформацію про сквошфи в ходу, щоб уникнути необхідності тимчасового простого файлу dd. Відмінна відповідь на squashfs, просто не
виконуючи

Чи буде це якось працювати з повним дисковим зображенням, що містить кілька розділів?
friederbluemle

Дивіться тут повний диск: unix.stackexchange.com/questions/31669/…
HackerBoss

Залежно від типу файлової системи, для монтажу можуть знадобитися такі ro,noloadпараметри:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss,

7

Мені вдалося отримати сервер NBD, щоб "обслуговувати" нестиснуту версію файлу .gz або .xz. Я не впевнений, чи доводиться дуже часто читати весь стиснутий файл (протестований лише з невеликими файлами в операційній пам’яті), але принаймні це працює, не виймаючи цілу нестиснуту копію.

Перегляд зображення стиснутого dd gz / xz "на ходу"

  1. Встановити nbdkit & client

    apt install nbdkit nbd-client
    
  2. Створіть демонстраційний файл стилю "dd" - порожній 50-мільймовий файл із файловою системою ext та поштовуйте його (необов'язково для тестування)

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

    Потім стисніть або gzip, або xz

    gzip -vk9 50m
    xz -v9k 50m
    

    Примітка. xzОпція " --block-size=16MiBмає" давати кращі показники випадкового доступу, але за рахунок меншої компресії (можливо, 1%?). Дивіться опис плагіна xb nbdkit .

  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і т.д.!

Завдяки Крістіану Ciupitu на Unix & Linux , хоча знадобилося трохи більше копати, щоб знайти плагін і все зібратися разом.


Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xzчудово працював з тією ж командою клієнта
EkriirkE

У Ubuntu xenial 16.04 LTS nbdkit 1.1.11 використовує старий протокол NBD, який відрізняється від нового протоколу NBD, який використовується nbd-client 3.13, але ви використовуєте nbd-клієнтську версію до 3.10, наприклад nbd-client 3.8 from Ubuntu precise 12.04 old LTS[використовувати старі версії лише для локальної безпеки!]
user1742529

0

Ось мій спосіб зробити це, не знайте, консольний еквівалент цього, хоча,

  • Стисніть папку в ізо. введіть тут опис зображення
  • Змонтуйте .isoфайл за допомогою Disk Image Mounter. введіть тут опис зображення
  • Тада я відкриваю стиснуту ізо, не розпаковуючи її. введіть тут опис зображення

4
Чи справді цей метод стискає дані? Схоже, він використовує просте зображення iso9660 (через файл-ролик?), Яке не використовує стиснення. Я спробував це у файлі розміром 100 МБ з усіма нулями ( dd if=/dev/zeroі файловим валиком), і він фактично додає 362 К даних (я думаю, що накладні). Дякуємо, хоча ідея на вірному шляху
Xen2050

Вибачте, але я не маю жодної ідеї щодо технологій стиснення, але якщо ви спробуєте будь-який інший формат стиснення, я думаю, ви також можете перерахувати це за допомогою файлового ролика, але якщо ви хочете прочитати цей файл, вам потрібно витягнути лише той конкретний файл.
привіт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.