1

Файл выходного изображения 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 , то будет ли оно там соответствовать?

2 ответа2

2

Каждой файловой системе нужно место для метаданных. Кроме того, ext family резервирует некоторое пространство для пользователя 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 output.

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

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

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

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

0

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

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

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

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? Так много места ??? !!!!! Большое спасибо!!

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .