LinuxForum.Fans
Тема

Read-only file system

Автор: subjucha 9 сообщений 15371 просмотров
#22636

Система Ubuntu Server 9.10, uptime 30 дней, автоматические обновления отключены и не производились в течении указанного uptime, также в течении этого времени систему (предположительно) никто не трогал.

Однако пару дней назад единственный раздел ext4 (с единственной точкой монтирования /) вдруг стал read-only.

Смотрел с помощью grep логи syslog и messages (в том числе архивные) на предмет наличия слов error, fail, read-only. Результат - нулевой. Свободное место на диске есть:

text
# df -k /dev/sda1
Файловая система           1K-блоков      Исп  Доступно  Исп% смонтирована на
/dev/sda1              6767808   3492664   2931356  55% /

Перезагружать систему, чтобы посмотреть что будет после перезагрузки, нельзя - система сейчас находится в работе и экспериментировать нельзя. Бекапа нет :(

В чём может быть дело, пожалуйста, помогите разобраться.
Полагаю, что fsck здесь не поможет (раздел примонтирован).

Привожу пример реагирования системы на запись в раздел:

text
# touch ~/test
touch: невозможно выполнить touch для `~/test': Read-only file system

Также непонятно, почему команда mount показывает, что раздел sda1 - rw, хотя на самом деле нет.

text
# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
#22666

есть замечательная утилита - hdparm
он без труда может перевести ваш жесткий диск в режим ro и обратно.
если сами не разберетесь, покажите что говорит

text
hdparm /dev/ваш_жесткий_диск
#22726

Я полагаю, что Вы предлагаете сбросить флаг readonly?
Но этот флаг не установлен:

text
# hdparm /dev/sda1

/dev/sda1: multcount = 16 (on) IO_support = 1 (32-bit) readonly = 0 (off) readahead = 256 (on) geometry = 2434/255/63, sectors = 13751577, start = 63

Также проверил на наличие сбойных секторов, без результата:

text
# badblocks -v /dev/sda1
Checking blocks 0 to 6875787
Checking for bad blocks (read-only test): done                                
Pass completed, 0 bad blocks found.

К сожалению, не установлены утилиты мониторинга SMART.
Есть идея отключить проверку файловой системы при старте в файле /etc/fstab (последнее число в соответствующей строчке установить в ноль). Возможно, тогда система сможет загрузиться, не обращая внимания на ошибки. Но это всё равно не даёт ответа на вопрос: как исправить проблему на работающей системе и примонтированной ФС?

Неужели остаётся только вариант проверки этого раздела из другой системы (например, LiveCD)?

Попробовал сделать проверку с помощью fsck:

text
# fsck /dev/sda1
fsck from util-linux-ng 2.16
e2fsck 1.41.9 (22-Aug-2009)
/dev/sda1:восстанавливаю журнал
/dev/sda1: clean, 38682/429936 files, 900146/1718947 blocks (check in 4 mounts)

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

text
# mount -o force,remount,rw /dev/sda1
mount: / уже не примонтирован или неверная опция

При этом mount пишет, что раздел примонирован.

#22779

Покажите dmesg? На всякий случай. smile
Только не из /var/log, а dmesg > out.txt. Текстовик с выхлопом можно положить например на флешку, дискету, любой доступный носитель в rw

#23085

Показываю, начиная с первого сообщения об ошибке (до этого много лишних сообщений от DNS):

text
[2473388.974901] EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 32: 15332 blocks in bitmap, 24624 in gd
[2473388.975205] Aborting journal on device sda1:8.
[2473388.976027] EXT4-fs (sda1): Remounting filesystem read-only
[2473388.978359] mpage_da_map_blocks block allocation failed for inode 34142 at logical offset 685 with max blocks 1 with error -30
[2473388.980472] This should not happen.!! Data will be lost
[2473388.986328] ext4_da_writepages: jbd2_start: 1024 pages, ino 34142; err -30
[2473388.988420] Pid: 22, comm: pdflush Not tainted 2.6.31-14-generic #48-Ubuntu
[2473388.988432] Call Trace:
[2473388.988481]  [<c056e41c>] ? printk+0x18/0x1c
[2473388.988506]  [<c0266162>] ext4_da_writepages+0x452/0x490
[2473388.988543]  [<c01ba551>] do_writepages+0x21/0x40
[2473388.988576]  [<c02033fe>] writeback_single_inode+0x16e/0x3d0
[2473388.988601]  [<c013b614>] ? dequeue_entity+0x14/0x290
[2473388.988618]  [<c013b8f8>] ? dequeue_task_fair+0x68/0x70
[2473388.988637]  [<c0203afd>] generic_sync_sb_inodes+0x38d/0x4a0
[2473388.988655]  [<c0203ced>] writeback_inodes+0x4d/0xe0
[2473388.988674]  [<c01b9432>] wb_kupdate+0xa2/0x110
[2473388.988692]  [<c01bac27>] __pdflush+0xf7/0x1f0
[2473388.988708]  [<c01bad20>] ? pdflush+0x0/0x40
[2473388.988724]  [<c01bad20>] ? pdflush+0x0/0x40
[2473388.988739]  [<c01bad59>] pdflush+0x39/0x40
[2473388.988755]  [<c01b9390>] ? wb_kupdate+0x0/0x110
[2473388.988780]  [<c015bf8c>] kthread+0x7c/0x90
[2473388.988795]  [<c015bf10>] ? kthread+0x0/0x90
[2473388.988820]  [<c0104007>] kernel_thread_helper+0x7/0x10
[2681077.565700] aptitude[5676]: segfault at 0 ip 0058e8d0 sp bffb8dbc error 4 in libc-2.10.1.so[4af000+13e000]
[2683445.701855] EXT4-fs error (device sda1): ext4_remount: Abort forced by user
[2683714.059586] EXT4-fs (sda1): Unrecognized mount option "force" or missing value

Сделал проверку fsck с ключиком -f, при этом нашлись и исправились ошибки (сразу надо было с этим ключиком!). Был многостраничный вывод с этими оршибками, который я не указываю, затем вот это:

text
Fix<y>? yes

/dev/sda1: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sda1: ***** REBOOT LINUX ***** /dev/sda1: 38682/429936 files (19.7% non-contiguous), 900146/1718947 blocks

После этого в папке lost+found пусто. Значит ли это что всё в порядке и ФС не повредилась?

По идее, после fsck теперь бы перемонтировать ФС и тогда перезагружаться не нужно, но перемонтирование указанным ранее способом не получается:

text
# mount -v -o remount,rw -t ext4 /dev/sda1 /
mount: cannot remount блочное устройство /dev/sda1 read-write, is write-protected

С опцией force:

text
# mount -v -o remount,rw,force -t ext4 /dev/sda1 /
mount: / уже не примонтирован или неверная опция
#23091

subjucha, так и не понятно, вы машину перезагружали? или на живую корень хотите смонтировать?

#23102

Систему пока ещё не перезагружал.
Да, хочу на живую смонтировать корень. Вернее перемонтировать - ведь в данный момент он смонтирован.

Я вот подумал: как же что-то запишется в lost+found, если ФС read only?
Может потому там и пусто?

#23107
subjucha написал:
Может потому там и пусто?

возможно.. я даже не представляю как можно на живую перемонтировать корень. зато выяснилось - ваш диск поврежден, произошли возможные потери файлов, и система перемонтировалась в ro благодаря опции errors=remount-ro
но вам придется останавливать сервер и проверять жесткий диск вплоть до mhdd. вот на такой случай и придумали HA кластера.

#23483

Перезагрузил систему - вроде бы всё работает. Как проверить, какие именно файлы были затронуты fsck (и были ли) - не знаю. Кстати, неплохо бы узнать это.

Огрррромное спасибо всем!

Войдите или зарегистрируйтесь, чтобы ответить.