Остановится ли `dd`, если вход будет больше, чем вывод? (выходной файл является разделом)

226
simernes

Я хочу переместить один раздел в другое место на жестком диске, т.е. содержимое sda1в sda2, и затем я хочу загрузиться с sda2.

Прежде всего, я не знаю, испортит ли это какую-нибудь таблицу разделов или что-то, что делает невозможным загрузку, но я попробую. Это раздел HFS +, и я не знал, как они себя ведут.

Игнорируя это, если я попытаюсь перейти ddот одного содержимого к другому (на самом деле я помещаю содержимое в файл в отдельный большой раздел), что произойдет, если не хватит sda2места? Будет ли он продолжать работать в следующем разделе, физически расположенном на диске, или он просто остановится и выдаст ошибку?

-1

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

3
Kamil Maciorowski

что будет, если не хватит sda2места?

Если вы используете of=/dev/sda2и не sda2хватает места, то ddвыйдите с No space left on device. Одним из пунктов использования таких специальных файлов, как, например, /dev/sda2является проверка того, что вы не читаете и не пишете за его пределами /dev/sda.

Полученная файловая система sda2будет повреждена, если только она не будет достаточно маленькой, чтобы уместиться в ней. Нечасто, но возможно иметь файловую систему, меньшую, чем раздел, содержащий ее. Только в этом случае dd-ing в меньший (но достаточно большой) раздел копирует всю файловую систему.

Но если вы использовали of=/dev/sdaи seek=…начать писать именно там, где sda2начинается, и если ваш ifразмер больше, чем sda2, то ddс радостью написал бы за конец sda2, потому что он открыл все sdaи имеет доступ ко всему этому. Мы используем sdaNабстракцию, чтобы избежать подобных неудач.

Хорошо, это имеет смысл. Кроме того, допустим, что sda2 немного больше, может быть, всего на 1 или 2 МБ, и он уже содержал файловую систему до = sda2. Если sda1 - файловая система, и я хочу использовать dd if = sda1 of = sda2, будет ли иметь значение, обнуляю ли я sda2, или я могу просто оставить все биты, которые там уже установлены? simernes 5 лет назад 0
@simernes В этом случае вы можете оставить эти биты в конце. Каждая файловая система должна знать, насколько она велика (файловые системы хранят эту информацию в своих заголовках, в вашем случае, я думаю, это уместно: [totalBlocks in HFS +] (http://dubeyko.com/development/FileSystems/HFSPLUS/hexdumps/hfsplus_volume_header. html # totalBlocks)), дополнительное пространство после его конца (обнулено или нет) не имеет значения. Kamil Maciorowski 5 лет назад 0
1
grawity

Если вы прямо в of=/dev/sda2:

Узлы разделительных устройств ограничены ядром в соответствии с таблицей разделов, поэтому все операции записи после конца будут возвращать -ENOSPC («На устройстве не осталось места»). При получении любой ошибки записи dd остановится.