Десь в інтернетах я прочитав, що gddrescue перевершує dd, принаймні, з точки зору того, що можна розрізнити кількість прочитаних дисків у проблемному секторі. Це справді так?
час dd, якщо = / dev / sda пропустити = 900343967 of = a.bin count = 4 iflag = direct conv = noerror, синхронізація
dd: читання `/ dev / sda ': помилка вводу / виводу
2 + 0 записів у
2 + 0 записах
1024 байтів (1,0 кБ) скопійовано, 18,66057 с, 0,1 кБ / с
3 + 1 записів у
4 + 0 записів із
2048 байтів (2,0 кБ) скопійовано, 18,6707 с, 0,1 кБ / среальний
користувач 0m18.672s 0m0.000s
sys 0m0.004s
До речі, прямий прапор дуже допомагає, без нього я зміг прочитати лише 1 сектор із 4 (проти 3/4 з ним). Однак це помітно сповільнює швидкість передачі даних - це принаймні приблизно в 5 разів повільніше для мене: 5 МБ / с проти 25 МБ / с без цього прапора. Так чи інакше, тепер для частини gddrescue (ddrescue) ..
час ddrescue -b512 -c1 -s4b -dnvD -i900343967b -o0b / dev / sda b.bin
Потрібно скопіювати 2048 байт з / dev / sda в b.bin
Початкові позиції: infile = 460976 MB, outfile = 0 B
Розмір копіювання блоку: 1 жорсткі блоки
Розмір жорсткого блоку: 512 байт
Макс_ретри: 0
Прямий: так Розріджений: ні Спліт: немає Магістраль: ніНатисніть Ctrl-C, щоб перервати
врятований: 1536 B, помилка: 512 B, швидкість струму: 53 B / s
ipos: 460976 MB, помилки: 1, середня швидкість: 53 B / s
opos: 1536 B, час від останнього успішного читання: 0 s
Закінченореальний
користувач 0m18.736s 0m0.004s
sys 0m0.000s
Як показано вище, для виконання було потрібно стільки ж часу. Як і очікувалося - та сама статистика: 3/4. Однак, хоча я міг прокладати проблемні сектори з 0x00 для dd (conv = sync), gddrescue, здається, не вистачає цієї функціональності? Натомість він просто пропускає проблемний сектор, не записуючи нічого до своєї позиції, і продовжує наступний наступний сектор (якщо я вже маю дані, записані над цим сектором у вихідному файлі - він не буде перезаписаний: іноді це може бути не бажаним ). Я не впевнений, як буде працювати параметр -t (усікати) для блочного пристрою з gddrescue(я здогадуюсь, він повністю замінить його на 0x00), але у звичайному файлі він буде, як було передбачено, усікати весь файл, не роблячи це лише в розмірах зміщення (тобто -o1). Таким чином, це дещо подібне до синхронізації dd , але далеко не те саме, що це лише імітує функціональність ідентифікатора, якщо Ви готові перезаписати весь вихідний пристрій / файл.
Хоча, завдяки наявності багатослівної опції та можливості реєструвати погані сектори / блоки - gddrescue здається кращим вибором. Важливо зазначити, що обидва додатки були запущені з (в значній мірі) однаковими парамами.
Вихід
різн
порожній (вихід 0), тобто файли точно такі ж.
Тепер це частина Я НЕ розумію:
ДД повільно, навіть якщо немає помилок, оскільки вона робить крихітні читання та записи. Він витрачає багато часу на пережовування помилкових частин накопичувача, а не на читання стільки речей, що не мають помилок, а потім повернутися, щоб зробити важкі речі.
Про що це все? Особливо частина " вона витрачає багато часу, пережовуючи помилкові частини накопичувача, а не читаючи стільки речей, що не мають помилок, ТОГО повертаючись, щоб зробити важкі речі "? Це зайняло стільки ж часу, як показано вище (хоча я перевірив дуже крихітну частину даних, але чи має це значення?).
gddrescue пропонує перемикач -r , який повинен контролювати кількість повторних зчитувань у "поганому секторі", однак, dd, здається, працює з -r0 весь час (як це зайняло той же час). Отже, чи є цей варіант лише для "післяобробки"? Що я отримую, - це те, що спочатку і dd, і gddrescue, здається, працюють з -r0, а DD , схоже, не пережовує помилкові частини більше, ніж gddrescue (вони, здається, зупиняються на поганому блоці протягом 15-18 секунди дають або беруть, так що угода, як швидше gddrescue ???)
Крім того, для чого варіант -D (використовувати синхронний запис для вихідного файлу)? Я не помітив жодної різниці від деяких проведених тестувань.
Хтось може прокоментувати все це? Дякую.