Почему файл выходного изображения DD больше, чем исходный раздел / не хватает места при копировании раздела в файл

1608
Michael P

Файл выходного изображения DD больше, чем исходный раздел, и DD не хватает места на целевом разделе (где создается изображение), несмотря на то, что он больше, чем исходный раздел.

Я пытаюсь скопировать раздел в файл другого раздела на том же диске. Целевой раздел немного больше, чем входной раздел. Оба являются ext3разделами.

Работает с OpenSuse-Rescue LIVE CD. Yast показывает, что входной раздел ( sdb1) равен 62,5 ГБ, а выходной sdb2- 62,85 ГБ.

Thunar показывает, что вход sdb1составляет 65,9 ГБ, а выходной sdb2- 66,2 ГБ, в то время как выходной ddфайл изображения также составляет 66,2 ГБ, поэтому, очевидно, он максимальный sdb2.

Вот консоль:

( sdb1был демонтирован, пробовал ddпару раз)

linux:# dd if=/dev/sdb1 of=RR.image bs=4096  dd: error writing ‘RR.image’: No space left on device 16156459+0 records in 16156458+0 records out 66176851968 bytes (66 GB) copied, 2648.89 s, 25.0 MB/s 

Дополнительная информация по запросу:

И снова: я вижу разницу в размере исходного раздела sdb1и файла изображения DD, RR.imageсозданного на его основе. Этот файл находится на sdb2.


Здесь все еще есть что-то неясное: я запускаю DD AS ROOT, так что зарезервированное пространство доступно для записи, верно? Цель sdb2составляет 62,85 ГиБ, а общее количество байтов для изображения, как вы сказали, составляет около 61,63 ГиБ. Здесь также выход dfи POSIXLY_CORRECT=1 dfкоманд:

Система теперь system-rescue-cd

root@sysresccd /root % df  Filesystem 1K-blocks Used Available Use% Mounted on … /dev/sdb1 64376668 7086884 56241208 12% /media/Data1 /dev/sdb2 64742212 64742212 0 100% /media/Data2 /dev/sdb3 5236728 4785720 451008 92% /usr/local  root@sysresccd /root % POSIXLY_CORRECT=1 df /dev/sdb1  Filesystem 512B-blocks Used Available Use% Mounted on /dev/sdb1 128753336 14173768 112482416 12% /media/Data1  root@sysresccd /root % POSIXLY_CORRECT=1 df /dev/sdb2  Filesystem 512B-blocks Used Available Use% Mounted on /dev/sdb2 129484424 129484424 0 100% /media/Data2 

Числа точно такие же, как и в простом, dfесли мы разделим их на 2. 1024b / 512b = 2 - это делитель.

  1. sdb1меньше чем sdb2. 100-процентное использование в sdb2настоящее время происходит из-за файла изображения DD, который заполнил раздел. Это должен быть единственный файл на нем сейчас.

  2. Сам файл изображения составляет 66 176 851 968 байт по состоянию на DD (во время выполнения) и Thunar. Разделенные на 1024 байта, мы получим 64625832 правильных K-блоков? Таким образом, он все еще меньше, чем dfсообщалось sdb2более чем на 116380 КБ, и он БОЛЬШЕ, ЧЕМ sdb1(ИСТОЧНИК), но при этом максимально увеличивает раздел sdb2.

Вопрос в том, что там, где взять это место sdb2?


Но самое главное и интересное это:

Почему целевой файл больше исходного раздела, ddиз которого он был создан? Что значит для меня: я не могу написать это обратно.

sdb1(64376668K) < RR.image(64625832K)

А также

sdb1(64376668 1K-блоков) < RR.image(64625832 1K-блоков) < sdb2(64742212 1K-блоков)

(Я надеюсь, что все было рассчитано правильно ...)

Теперь я проверил блоки, которые зарезервированы для ROOT. Я нашел эту команду для выполнения:

root@sysresccd /root % dumpe2fs -h /dev/sdb1 2> /dev/null | awk -F ':' '{ if($1 == "Reserved block count") { rescnt=$2 } } { if($1 == "Block count") { blkcnt=$2 } } END { print "Reserved blocks: "(rescnt/blkcnt)*100"%" }'  Reserved blocks: 1.6%  root@sysresccd /root % dumpe2fs -h /dev/sdb2 2> /dev/null | awk -F ':' '{ if($1 == "Reserved block count") { rescnt=$2 } } { if($1 == "Block count") { blkcnt=$2 } } END { print "Reserved blocks: "(rescnt/blkcnt)*100"%" }'  Reserved blocks: 1.59999% 

Таким образом, процент, зарезервированный для ROOT, также одинаков для обоих разделов, если это имеет значение.


Вот вывод для gdisk:

root@sysresccd /root % gdisk -l /dev/sdb  GPT fdisk (gdisk) version 1.0.1  Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present   *************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory.  ***************************************************************  Disk /dev/sdb: 312581808 sectors, 149.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): DCF8AFC4-11CA-46C5-AB7A-4818336EBCA3 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 312581774 Partitions will be aligned on 2048-sector boundaries Total free space is 7789 sectors (3.8 MiB)  Number Start (sector) End (sector) Size Code Name 1 2048 131074047 62.5 GiB 8300 Linux filesystem 2 131074048 262889471 62.9 GiB 8300 Linux filesystem 3 302086144 312580095 5.0 GiB 0700 Microsoft basic data 5 262891520 293771263 14.7 GiB 8300 Linux filesystem 6 293773312 302086143 4.0 GiB 8200 Linux swap 

Так каков реальный размер sdb1тогда?

Разве sdb2(N2) не больше, чем sdb1(N1)? ПОЧЕМУ файл изображения растет больше, чем sdb2(N2)? Если я выключу место, зарезервированное для root sdb2, будет ли оно там соответствовать?

1
Если мой ответ не убедит вас, укажите точные цифры для сравнения. Например, чтобы узнать, насколько велики ваши * разделы *: `sudo gdisk -l / dev / sdb`; чтобы узнать, сколько места может предоставить ваша целевая * файловая система *: `POSIXLY_CORRECT = 1 df / точка монтирования / где / sdb2 / is / mount /`. Пожалуйста [отредактируйте] вопрос и вставьте выходные данные этих команд (после [объединения учетных записей] (https://superuser.com/help/merging-accounts), если необходимо). Я видел ваши (?) Предложенные изменения, и я думаю, что вы все еще сравниваете неправильные числа. `64376668KiB` для` sdb1` не имеет значения; * раздел * больше этого. Kamil Maciorowski 6 лет назад 0
Пожалуйста. Полный вывод `dd` будет соответствовать * размеру * раздела,` df` работает на * файловых системах *. `64376668KiB` - это пространство, доступное в * файловой системе * внутри` sdb1`, раздел наверняка будет * больше *. Еще раз: что выдает `gdisk -l / dev / sdb`? Вы можете прочитать размер раздела из него, это то, что имеет значение. Kamil Maciorowski 6 лет назад 0

2 ответа на вопрос

2
Kamil Maciorowski

Каждой файловой системе нужно место для метаданных. Кроме того, extсемья оставляет за собой место для rootпользователя и по умолчанию составляет 5%.

пример

В моем Kubuntu я создал (разреженный) файл размером 1 ГБ:

truncate -s 1G myfile 

и сделал ext3файловую систему внутри него. Команда была простой

mkfs.ext3 myfile 

Это сразу выделило около 49 МБ (~ 5% в данном случае) myfile. Я мог видеть это, потому что файл был редким и первоначально сообщал об использовании 0B на моем реальном диске, тогда это росло. Я предполагаю, что именно здесь живут метаданные.

Я смонтировал файловую систему; df -hсообщается о 976MiB общего пространства, но доступно только 925MiB. Это означает, что еще ~ 5% были недоступны для меня.

Затем я заполнил это пространство (после cdточки монтирования)

dd if=/dev/urandom of=placeholder 

Как обычный пользователь, я мог взять только 925MiB. Заявленное использование диска было тогда 100%. Однако, делая то же самое, что и rootя, я мог записать 976MiB в файл. Когда размер файла превысил 925 МБ, загрузка осталась на уровне 100%.

Заключение

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


РЕДАКТИРОВАТЬ:

Чтобы было понятно: ваши 66176851968 байт составляют около 61,63 ГиБ. Это не больше, чем исходный раздел, который составляет 62,5 ГиБ. Исходный раздел не был полностью прочитан, когда целевая файловая система переполнилась.

Если вы не знакомы с различием GB / GiB, читайте man 7 units.


РЕДАКТИРОВАТЬ 2

Теперь у нас есть все реальные цифры. Давайте придерживаться единицы 512B, это общий размер сектора.

  • Ваш sdb1 раздел занимает 131074048-2048=131072000единицы на диске. Давайте назовем это P1. Это из gdiskвывода.
  • Ваш sdb2 раздел занимает 262889472-131074048=131815424единицы на диске. Пусть будет P2. Это тоже из gdiskвывода.
  • Ваша файловая система внутри sdb1может хранить файлы до 128753336общего количества единиц. Давайте назовем этот номер F1. Это из dfвывода.
  • Ваша файловая система внутри sdb2может хранить до 129484424единиц. Пусть будет F2. Это тоже из dfвывода.

Разницу между P1и F1, а также разницу между P2и F2можно объяснить, если вы знаете, что для метаданных должно быть место. Это упоминалось ранее в этом ответе.

Вы ddпопытались скопировать весь sdb1 раздел, то есть P1данные, в файл, который занимает пространство, предоставленное файловой системой внутри sdb2, то есть F2доступного пространства.

P1> F2- это окончательный ответ. Ваш файл изображения не стал больше, чем должен. Мне кажется, вы ожидали, что его размер будет F1. На самом деле все изображение будет иметь размер P1единиц.

P2и не F1имеют значения в этом контексте.

Только что нашел это второе редактирование сейчас. Ранее проводил собственное расследование на основе ваших предыдущих постов, которые я разместил в качестве ответа для себя. Простите за это. И большое вам спасибо! Надеюсь, я правильно написал свой ответ. Michael P 6 лет назад 0
Надеюсь, я все понял правильно, вы можете исправить меня, если нет? Michael P 6 лет назад 0
0
Michael P

После этого долгого обсуждения я понял, что вы имеете в виду.

Мы наконец добрались до сути. Ну, мой вопрос был немного неясен, прежде чем я его отредактировал. Большое спасибо!

Я нашел эту команду, чтобы получить точный размер разделов в байтах:

root @ sysresccd / root% parted / dev / sdb unit B p

Модель: ATA WDC WD1600AAJS-0 (SCSI)

Диск / dev / sdb: 160041885696B

Размер сектора (логический / физический): 512B / 512B

Таблица разделов: msdos

Флаги дисков:

Номер Начало Конец Размер Тип Файловая система Флаги

1 1048576B 67109912575B 67108864000B основная загрузка ext3

2 67109912576B 134599409663B 67489497088B первичный ext3

4 134600457216B 154668105727B 20067648512B продлен

5 134600458240B 150410887167B 15810428928B логический ext4

6 150411935744B 154668105727B 4256169984B логический linux-swap (v1)

3 154668105728B 160041009151B 5372903424B первичный жир32 фунта

Поэтому в основном мне нужно сравнить реальный размер sdb1 (N1) в этом списке с доступным пространством на sdb2 (N2) в этом списке.

Но для этого мы используем команду POSIXLY_CORRECT = 1 df для целевой файловой системы (sdb2), которая в этом случае была: 129484424 512b-блоков.

Если мы разделим 67108864000B от sdb1 на 512 b = 131072000 512b-блоков. Или мы можем умножить 129484424 * 512 = 66296025088 байт.

Таким образом, 66296025088 байт (доступное пространство на sdb2) <67108864000 байт (необработанный размер sdb1). Очевидно, что образ раздела sdb1 не может вписаться в доступное пространство на sdb2. И есть место, зарезервированное для ROOT на sdb2, которое также следует учитывать.

Что касается моего вопроса о файле образа, превышающем размер раздела, то я в основном сравнил размер файловой системы sdb1 с изображением DD, а не с необработанным размером раздела, который должен быть полностью прочитан DD. Правильный? Я даже могу приблизительно определить, сколько места мне нужно для завершения операции: 66 176 651 968 байт был размером неполного изображения DD, поэтому я сравнил его с размером необработанного sdb1-раздела 66 176 851 968 = 66176851968 B <67108864000 B = меньше на 932012032 байт = 888 MiB

Но эй, что там на пустом разделе? Метаданные и место зарезервированы для root? Так много места ??? !!!!! Большое спасибо!!

Приятно знать все это !!

Официальное примечание: этот сайт не является форумом, его вопросы и ответы. В ответе не следует напрямую обращаться к кому-либо, кроме спрашивающего. Вы отвечаете себе (и это нормально), а не я; ответ должен отражать это. Комментарии для (разумных) обсуждений. Kamil Maciorowski 6 лет назад 0
Теперь я понимаю, спасибо! Спасибо большое за помощь и терпение! Michael P 6 лет назад 0
«Таким образом, 66296025088 байт (доступное пространство в` sdb2`) <67108864000 байт (необработанный размер `sdb1`). Очевидно, что образ раздела` sdb1` не может вписаться в доступное пространство в `sdb2`." Подтверждено, что эти цифры кажутся мне правильными. Это главная проблема здесь, и я рад, что мы наконец решили это. Kamil Maciorowski 6 лет назад 0
Я тоже рад! Michael P 6 лет назад 0

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