Разбейте изображение dd в несколько файлов

До сих пор я всегда думал об этом как безопасность, а не производительность - дополнительные издержки удостоверяющегося гнома и связывался, пакеты были актуальны. Я никогда не волновался слишком много об аспекте производительности его, тем более, что большую часть времени наши серверы Linux работают без меня, или кто-либо еще вошел в систему локально.

6
задан 21 November 2009 в 02:39
6 ответов

Вы, вероятно, хотите рассмотреть использование tar, как KPWINC говорит, но отвечать на Ваш вопрос непосредственно, Вы хотите использовать dd"пропустите" опцию.

Если Ваша первая команда, как указано:

sudo dd if=/dev/sdf1 bs=4096 count=150GB | gzip > img1.gz

Затем Ваша секунда была бы:

sudo dd if=/dev/sdf1 bs=4096 skip=150GB count=40GB | gzip > img2.gz

и в-третьих:

sudo dd if=/dev/sdf1 bs=4096 skip=190GB count=120GB | gzip > img3.gz

Тем не менее я не уверен, что суффикс "ГБ" делает то, что Вы предназначаете. Я думаю, что это просто делает необработанную математику на корневом числе, за которым это следует, не выясняют, как получить это много гигабайтов от размера блока, который Вы дали. Я сделал бы что-то вроде этого:

dd if=/dev/sdf1 bs=`expr 10 * 1024 * 1024` count=`expr 15 * 1024 * 1024 * 1024`

только быть уверенным в математике.

О, и удостоверьтесь, что Ваше устройство не изменяется под Вами, поскольку Вы копируете его. Это было бы плохо.

5
ответ дан 3 December 2019 в 00:03
  • 1
    Да, Вы не хотите использовать ГБ таким образом исходный перечисленный плакат. Лучший путь состоит в том, чтобы установить Ваш blocksize на большее и более разумное количество (если у Вас нет серьезного основания для движения меньшего, I' d всегда идут по крайней мере 1 МБ). Для получения 150 ГБ как, он перечислил, I' d делают ' bs=1GB count=150'. –  Christopher Cashell 24 November 2009 в 18:19

Простое решение могло бы быть, чтобы просто использовать "/usr/bin/split". Это просто разбивает файлы в части. Можно использовать "-" в качестве входного имени файла для чтения из стандартного входа. Хорошая вещь о разделении состоит в том, что это просто, это не влияет на набор инструментальных средств никаким реальным способом, и можно "присоединиться" к файлам, просто используя "кошку" для шарика их назад вместе (или передать их по каналу к другому приложению).

6
ответ дан 3 December 2019 в 00:03

tar

Я смолю, мог бы решить Вашу проблему. Это имеет способность разбить файлы в несколько объемов.

Проверьте эту ссылку:

http://paulbradley.tv/44/

От страницы:

Два дополнительных параметра командной строки, которые необходимо использовать свыше стандартного синтаксиса, являются-M (-многотомный), который говорит Tar, что Вы хотите разделить файл по нескольким дискам медиа. Затем необходимо сказать Tar, как большой, который медиа, так, чтобы он мог создать файлы корректного размера. Чтобы сделать это, Вы используете - опция длины ленты, где значение, которое Вы передаете, является номером x 1 024 байта.

Пример ниже показывает используемый синтаксис. Позволяет говорят, что largefile.tgz являются 150 Meg, и мы должны соответствовать файлу на два 100 Zip-дисководов Meg.

tar-c-M - tape-length=102400 - file=disk1.tar largefile.tgz

Значение 102400 составляет 1024 x 100, который создаст 100 файлов Meg, названных disk1.tar, и затем Tar запросит объем 2 как ниже:-

Подготовьте объем № 2 к disk1.tar и поразите возврат:

Во время ленточных накопителей Вы вынули бы первую ленту из машины и вставили бы новую ленту и нажали бы возврат для продолжения. Поскольку мы хотим, чтобы Tar создал оставление 50 Meg в отдельном файле, мы даем следующую команду:-

n disk2.tar

Это дает Tar команду продолжать писать оставление 50 Meg largefile.tgz в файл, названный disk2.tar. Вам затем предложат со строкой ниже, и можно теперь поразить возврат для продолжения.

Подготовьте объем № 2 к disk2.tar и поразите возврат:

Вы повторили бы этот процесс, пока Ваш большой файл не был полностью обработан, увеличив номер диска в имени файла каждый раз, когда Вам предлагают.

1
ответ дан 3 December 2019 в 00:03
  • 1
    ответ корректен, я мог бы добавить, что он хочет пойти с файлами на 10 ГБ, поскольку 10 наибольший общий делитель для 150, 40, 120 –  asdmin 21 November 2009 в 01:32
  • 2
    Как я возобновил бы смолить, если бы я должен был переключиться на различные компьютеры (удаляющий/dev/sdf1 и повторно подключающий его к месту назначения)? –  lfaraone 21 November 2009 в 02:41

Несколько вещей здесь. Во-первых, команда, которую Вы перечислили, вероятно, не будет работать, как Вы ожидаете. Похоже, что Вы пытаетесь поразить 150 ГБ, но необходимо включить и в размер блока и в количество (количество является количеством блоков размера блока). Таким образом, если Вы хотите 150 ГБ, Вы могли бы сделать bs=1GB count=150. Вы могли затем взять, где Вы кончили путем добавления a skip=150 пропускать 150 блоков (каждый 1 ГБ) на Вашем втором выполнении. Кроме того, чтобы иметь gzip отправляют его вывод в стандарт, необходимо передать его -c опция.

Однако, прежде чем Вы делаете это, несколько других вопросов. Вы используете dd здесь, потому что файловая система повреждать/навредить/и т.д., и Вам нужна поразрядная точная копия образа диска его? Или Вы просто пытаетесь получить данные от? Осведомленный о файловой системе инструмент мог бы быть более эффективным. Особенно, если исходная файловая система не полна. Опции включают tar, или Вы могли бы хотеть изучить что-то как Clonezilla, Partclone, Partimage, или для более определенной для Windows опции непосредственно получить доступ к файловой системе Windows, Linux-NTFS (обратите внимание, что ранее упомянутые инструменты могут обработать файловые системы Windows до различных градусов, также).

Если Вы будете установлены при работе на разделе с нефайловой системой осведомленная программа, то использование Вашей dd строки (как изменено выше, чтобы быть корректным) будет, вероятно, работать. Трудно сказать, как хорошо это сожмется, но это должно быть меньше, чем исходная файловая система. Если бы у Вас есть доступ для чтения-записи к исходной файловой системе, стоило бы заполнить свободное пространство файлом, записанным из/dev/zero для обнуления неиспользуемого места прежде, чем сохранить его с dd. Это улучшит способность gzip сжать свободное пространство в образе диска.

Для работы на второй блок просто добавьте a skip=XXX бит к Вашему второму dd вызову, где 'XXX' равно count= значение Вы дали ему первый раз. Если бы Вы хотели сделать 150 ГБ на своем первом одном и 40 на Вашей секунде, то Вы могли бы сделать:

sudo dd if=/dev/sdf1 bs=1GB count=150 | gzip -c > img1.gz

сопровождаемый:

sudo dd if=/dev/sdf1 bs=1GB skip=150 count=40 | gzip -c > img2.gz

1
ответ дан 3 December 2019 в 00:03

Опоздал на вечеринку, но мне пришлось сделать такой сценарий для резервного копирования неизвестной файловой системы на карту FAT32.

Этот простой сценарий работает для меня:

# Sets pipefail so failed dd makes the whole pipe command fail
set -o pipefail
dd_result=0
split=0
filenameSplit=
while [ $dd_result == 0 ]
do
    cmd="dd if=/dev/sdX bs=2G count=1 skip=$split | pigz --fast > \"2G.$filenameSplit.myharddisk.gz\""
    echo $cmd
    eval $cmd
    dd_result=$?
    split=$((split + 1))
    filenameSplit=$split
done

РЕДАКТИРОВАТЬ: Вы загрузили базовый сценарий восстановления из резервной копии который использует сжатие dd, pigz или gzip и разбивает файлы на части, которые можно установить в командной строке. Сценарий найден здесь: github.com/deajan/linuxscripts

0
ответ дан 3 December 2019 в 00:03

Это моя командная строка:

dd if=/dev/sda bs=4M | gzip -c | split -b 2G - /mnt/backup_sda.img.gz

Он создаст файлы размером 2 ГБ следующим образом:

backup_sda.img.gz.aa
backup_sda.img.gz.ab
backup_sda.img.gz.ac

Восстановить:

cat /mnt/UDISK1T/backup_sda.img.gz.* | gzip -dc | dd of=/dev/sda bs=4M

Надеюсь, это поможет.

3
ответ дан 3 December 2019 в 00:03

Теги

Похожие вопросы