LINUX.ORG.RU

Перемонтировать из ro в rw после ошибки без перезапуска

 , , , wear leveling


0

2

Домашняя удалённая система на 4GB флешке, бывает, сбоит:

[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 Sense Key : Medium Error [current] 
[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 Add. Sense: Unrecovered read error
[Thu Oct 27 12:01:59 2016] sd 10:0:0:0: [sdg] tag#0 CDB: Read(10) 28 00 00 4b 70 58 00 00 08 00
[Thu Oct 27 12:01:59 2016] blk_update_request: critical medium error, dev sdg, sector 4943960
[Thu Oct 27 12:01:59 2016] Buffer I/O error on dev sdg2, logical block 524299, async page read

Иногда после такой ошибки / (/dev/sdg2) переходит в ro. Как бы его оттуда вытащить без перезагрузки?

Бесконечный цикл:

# mount -o remount,rw /dev/sdg2
mount: cannot remount /dev/sdg2 read-write, is write-protected

# dmesg -T | tail -n1
[Thu Oct 27 12:35:52 2016] EXT4-fs error (device sdg2): ext4_remount:4707: Abort forced by user

# blockdev -v --getro /dev/sdg2
get read-only: 0

# blockdev -v --setrw /dev/sdg2
set read-write succeeded.

# fsck /dev/sdg2
fsck from util-linux 2.28.2
e2fsck 1.43.3 (04-Sep-2016)
debianroothome contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (122865, counted=122944).
Fix<y>? yes
Free inodes count wrong (70515, counted=70521).
Fix<y>? yes

debianroothome: ***** FILE SYSTEM WAS MODIFIED *****
debianroothome: ***** REBOOT SYSTEM *****
debianroothome: 150663/221184 files (0.4% non-contiguous), 760768/883712 blocks

# fsck -f /dev/sdg2
fsck from util-linux 2.28.2
e2fsck 1.43.3 (04-Sep-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
debianroothome: 150663/221184 files (0.4% non-contiguous), 760768/883712 blocks

Перезапуск удалённо не имеет смысла: обнаруживается, что ФС с ошибками, которые нужно фиксить вручную, что совсем некстати. Когда потом из initrd запускаю fsck, всё фиксится и грузится дальше. Но в чём разница? В флешке что-то ресетится при перезапуске?

На флешку было записано не так уж много:

# tune2fs -l /dev/sdg2 | grep -e created -e writes
Filesystem created:       Fri Aug  5 22:55:45 2016
Lifetime writes:          29 GB
И 3-х месяцев ещё не прошло.

Кстати, на простых флешках есть wear leveling? Иначе его отсутствие могло бы быть объяснением чрезмерно быстрого износа одних и тех же секторов, хотя общее кол-во записанного совсем небольшое.

★★★★★

Последнее исправление: gag (всего исправлений: 1)

Есть подозрение, что контроллер перевел flash в ro из-за предельного износа. Я так SD-картах видел несколько раз.

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

Так если бы он был предельный, то перезапуск не помогал бы. Если б с этим контроллером можно было как-то поговорить.

gag ★★★★★
() автор топика
Ответ на: комментарий от gag

blockdev -v --setrw /dev/sdg2

тогда уж «blockdev -v --setrw /dev/sdg»

но боюсь, что ты столкнулся с «искусственным» интеллектом контроллера.

Если такое часто случается с этой флешкой, значит ее нужно заменить.

vel ★★★★★
()
Ответ на: комментарий от vel

Провёл эксперимент. Прогнал fsck - он поправил ошибку. Перезагрузился - снова запустился fsck, но ошибок уже не было. Класс! Т.е. если не перегружаться, то он снова и снова находит ошибку, а если прогнать, и не пытаясь перемаунтить rw перезагрузиться, то тот прогон на якобы ro имел действие. Странно.

Кстати, недавно один винт сбойнул. И точно так же ни в какую его не вернуть в rw. То ли я что-то пропускаю, эту функциональность в ядре давно не тестировали, и она сломалась.

gag ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.