Коли DD підходить для копіювання даних? (або, коли read () і write () часткові) вказує на важливий застереження при використанні count
: dd
може копіювати часткові блоки, тож коли count
це буде припинено після заданої кількості блоків, навіть якщо деякі блоки були неповними. Тому ви можете bs * count
скопіювати менше байтів, скопійованих, якщо не вказати iflag=fullblock
.
Типовий розмір блоку для dd - 512 байт. count
є межа; так як ваше запитання натякає, що воно не потрібно при копіюванні пристрою обмеженого розміру, і воно дійсно призначене для копіювання лише частини пристрою.
Я думаю, що тут слід врахувати два аспекти: продуктивність та відновлення даних.
Що стосується продуктивності, то в ідеалі ви хочете, щоб розмір блоку був принаймні рівним і кратним основного фізичного розміру блоку (отже, 2048 байт при читанні CD-ROM). Насправді нині ви можете також вказати більші розміри блоків, щоб дати можливість базовим системам кешування шафікувати речі для вас. Але збільшити розмір блоку означає, dd
що потрібно використовувати набагато більше пам’яті, і це може бути контрпродуктивно, якщо ви копіюєте через мережу через фрагментацію пакетів.
Що стосується відновлення даних, ви можете отримати більше даних з несправного жорсткого диска, якщо ви використовуєте менші розміри блоків; це те, що такі програми dd-rescue
роблять автоматично: спочатку вони читають великі блоки, але якщо блок не вдається, вони перечитують його з меншими розмірами блоків. dd
не зробиш цього, просто вийде з ладу весь блок.
dd bs=4m iflag=fullblock
vsdd bs=1111
і помітьте значно більшу швидкість передачі даних, яку вам дасть перша. Це відбувається тому, що перший вирівнюється з натуральними розмірами блоків на SD-картці, а другий вимагає, щоб контролер SD робив багато читання, копіювання та перепрошивки для запису часткових фізичних блоків. Доfullblock
речі, важливість не слід недооцінювати, оскільки без неїbs
є лише максимум, і часткове читання може призвести до стійких подальших невідповідностей.