Яка різниця між командами 'bs', 'count' та 'search' у команді dd?


24

Я прочитав багато посібників і повідомлень на форумі , що описують , як використовувати dd, але одна річ , яку я помітив, що люди завжди використовують різні значення для bs=, count=і seek=перемикачі.

Будь-хто може пояснити, що саме роблять ці перемикачі (сторінка man не дуже детальна) та поясніть, які найкращі налаштування для них є для різних завдань, таких як створення файлів з / dev / random або / dev / zero та перезапис перегородки та зовнішні накопичувачі.


Відповіді:


27

Я дійсно не знаю, як це пояснити краще, ніж це сторінка.

bs=встановлює розмір блоку, наприклад bs=1M, буде розмір блоку 1MiB.

count=копіює лише цю кількість блоків (за замовчуванням для dd буде продовжуватися вічно або поки не закінчиться вхід). В ідеалі блоки мають bs=розміри, але можуть бути неповні зчитування, тому якщо ви використовуєте count=для копіювання певного обсягу даних (count*bs ), вам також слід надати iflag=fullblock.

seek= шукає цю кількість блоків у виході, а не записувати до самого початку пристрою виведення.

Так, наприклад, це копіює 1MiB, y\nщоб розмістити 8MiB вихідного файлу. Таким чином, загальний розмір файлів складе 9 Мбіт.

$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun  3 21:02 outputfile
$ hexdump -C outputfile
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00900000

Оскільки ви згадуєте /dev/randomта перезаписуєте розділи ... це займе назавжди, оскільки /dev/random(як і /dev/urandom) це занадто повільно. Ви можете просто використовувати shred -v -n 1натомість, це швидко і зазвичай доступне в будь-якому місці.


21

Гаразд, ви сказали, що чоловікові сторінки не є детальними, тому я поясню, що вони означають, з легкими для розуміння метафорами про рухливого хлопця (це йде під назвою dd):

   bs=BYTES
          read and write up to BYTES bytes at a time

ddпідбирає щось (ящики, вази, ліжка, рис тощо), переміщується туди, де треба і відкидає його. Поки він не скидає вантаж, він нічого іншого не вибирає. Тепер, коли вам потрібно точно сказати йому, скільки об’єктів він повинен вибрати за одну подорож, це bsробити. Ви встановлюєте кількість даних, які він буде читати і записувати. Це майже обов’язково у всіх корисних і загальних командах.

   count=N
          copy only N input blocks

Це визначить загальну кількість коробок, які він перемістить. Коробки в цьому контексті - це блоки на диску . Ви кажете йому перемістити 5 ящиків, він переміщує лише 5 ящиків, навіть якщо є більше 5 ящиків (якщо менше 5 ящиків, він візьме вазу, яку він знайшов, окрім коробок, щоб додати її). Якщо ви скажете , ddщоб countтільки 5, і записати його куди - небудь, він буде копіювати перші 5 блоків , які він бачить і записати їх , де ви хочете.

   seek=N skip N obs-sized blocks at start of output

Хлопець зазвичай знаходить перше доступне місце для скидання вантажу, як правило, на початку (диска), і продовжує заповнювати до кінця. Ну, з цим ви кажете ddпочати далі, скажімо замість залу, починайте в одній із кімнат далі всередині. Це просто "пропустити" стартові блоки.

Тепер, залежно від того, що ви робите, вам знадобляться різні комбінації залежно від джерела та місця призначення, а також формату, коли вони будуть прочитані та записані. Рекомендую шукати їх окремо.


"він візьме вазу, яку знайшов, крім скриньки, щоб додати її". Що означає ця метафора?
Іні

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