dd завжди не вдається записати один розділ при першій спробі; досягає успіху на секунду


6

Для проекту з робототехніки я зібрав ціль make, яка використовує dd(власне dcfldd) для написання зображення Raspbian Jessie на SD-карту. Таким чином, я можу бути впевнений, що моє середовище відтворюється з нуля в будь-який час, коли я цього хочу.

Ціль зробити просто

flash:
    sudo dcfldd bs=4M if=$(IMGPATH) of=$(SDX)
    sync

де $(SDX)є / dev / sdc, і мається на увазі сценарій, який монтує зображення в / mnt / img, вносить деякі модифікації, дзвінки syncта відключає його.

Процес, здається, працює нормально, за винятком того, що мені завжди потрібно викликати ціль make два рази - перший раз, якщо я належним чином витягнув весь зчитувач карт, а потім знову вставити його, один із двох розділів із зображення не вдасться встановити, і, якщо я спробую завантажувати з нього Raspberry Pi, у мене виникає паніка ядра.

Після спроби флеш-карти (із вказівкою Зробити ціль або вручну в терміналі), викидання за допомогою параметра контекстного меню запуску Ubuntu "Витягнути батьківський диск", видалення та повторне вставлення зчитувача, завантажувальний розділ відкриється в Nautilus, але я отримую наступне діалогове вікно і жодного основного розділу.

помилка монтажу

Останні сто або близько лінії dmesg знаходяться тут . Напевно, відповідні є

[100640.545190] FAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

і

[101082.691558] EXT4-fs (sdb2): bad geometry: block count 3894272 exceeds size of device (964096 blocks)

Як перший підказує, я роблю sudo fsck /dev/sdb, і отримую наступне.

fsck from util-linux 2.20.1
e2fsck 1.42.9 (4-Feb-2014)
fsck.ext2: No medium found while trying to open /dev/sdb

The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>
or
    e2fsck -b 32768 <device>

Якщо я це роблю

sudo dcfldd bs=4M if=/dev/sdb of=/tmp/from-sd-card.img count=1024
cmp /tmp/from-sd-card.img /home/tsbertalan/workspace/gunnar/2016-05-27-raspbian-jessie.img

я отримав

/tmp/from-sd-card.img /home/tsbertalan/workspace/gunnar/2016-05-27-raspbian-jessie.img differ: char 4194342, line 1

і якщо я це роблю

cmp -b --verbose /tmp/from-sd-card.img /home/tsbertalan/workspace/gunnar/2016-05-27-raspbian-jessie.img

я отримав

4194342   1 ^A     0 ^@
70255618  72 :    257 M-/
70255619  35 ^]     3 ^C
70255622 375 M-}  266 M-6
70255623 166 v     16 ^N
70255625  34 ^\   114 L
70255626 345 M-e  274 M-<
70255627   4 ^D     0 ^@
70255629  77 ?     14 ^L
70255630 371 M-y  176 ~
70255631 144 d      1 ^A
70255633 326 M-V  200 M-^@
70255634 256 M-.  252 M-*
70255635  32 ^Z     1 ^A
70255661 373 M-{  114 L
70255662 123 S    124 T
70255665 105 E    120 P
70255666 132 Z    124 T
70255669  24 ^T     2 ^B
70255754   0 ^@   155 m
70255823 352 M-j  353 M-k
70255993 125 U    201 M-^A
70255994 323 M-S  343 M-c
70255995 257 M-/   71 9
1815085083  72 :      0 ^@
1815085084 103 C    132 Z

Це 4194342здається незмінним.

Я можу відтворити проблему лише в тому випадку, якщо я вставив належним чином прошиті карти в RPI, завантажте її та закрийте. Після цього потрібні дві спроби належним чином спалахнути карту. Зараз я сильно підозрюю, що автоматичний розмір, який Raspbian виконує під час першого завантаження, може бути частиною цієї проблеми. Якщо це питання буде краще підходити для сайту stackxchange Raspberry Pi, його можна буде перенести туди.

Що тут відбувається? Чи є ще якийсь спосіб, як я повинен написати це зображення, щоб воно працювало з першої спроби? Я не хочу записувати свої обмежені цикли запису на SD-карту.

Я маю лише один зчитувач карт, щоб протестувати це, але я спробував як з 16 ГБ Samsung EVO micro SDHC, так і з 8 ГБ SanDisk Ultra micro SDHC та 32 ГБ SanDisk Ultra micro SDHC, з однаковими результатами на всіх.


1
Я зіткнувся з аналогічною проблемою з відхиленням зображення під час першого запуску, але не під час другого запуску. Я помітив, що якщо розділ, на який ви натискаєте зображення, також не був відформатований більше, ніж розмір розділу зображення, коли він був створений у тому самому форматі, що це потрібно зробити двічі. Я думав, що будує частини розділу під час першого запуску, тому натискання зображення не вдалося, а під час другого запуску здається, що все встановлено на розділі, він теж натискається і працює.
Pimp Juice IT

Я закінчила форматування всього диска у потрібному мені форматі файлової системи (один великий розділ), а потім натиснула зображення, можливо, вам знадобиться створити розділ, хоча напевно більший за розділ, на якому було зображення, коли воно було створене, і це може бути працювати теж.
Pimp Juice IT

Я спробував зробити sudo parted --script $(SDX) mkpart primary ext4 5Gперед тим, як запустити спалах. Неефективний. Я пограю з цим більше пізніше, якщо матиму час; я зараз думаю, що мені доведеться задовольнятися спалахом двічі кожного разу.
цберталан

Щоб зображення та розмір картки збігалися чи картка більша?
дрону

1
Ваша проблема однакова, коли ви вводите команди вручну (без make)? Чи використовуєте ви GPT з карткою? "якщо я належним чином витягнув весь зчитувач карт, а потім повторно вставити його, один із двох розділів із зображення не вдасться встановити". Не вдалося встановити яким чином? Ви пробували з іншим читачем карт? чи інша карта? Ви спробували прочитати назад із картки та порівняти їх із початковим зображенням (на зразок cmp)? Якщо так, чи завжди різниця є в одному байті?
Каміль Маціоровський

Відповіді:


0

[101082.691558] EXT4-fs (sdb2): неправильна геометрія: кількість блоків 3894272 перевищує розмір пристрою (964096 блоків)

Заголовок файлової системи пошкоджений. Однозначно відкрийте помилку з технічним обслуговуючим інструментом автоматичного зміни розміру.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.