Был как-то случай когда заканчивалось место у клиента на XFS разделе, клиент не отреагировал.
Получили 'Input/output error'.
Пришлось исправлять ситуацию.
Опишу что как делать и какие подводные камни можем встретить.
Описание делается на примерах из интернета, реально ситуация была когда свободно было 0 места.

1. Смотрим как называется наш раздел

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 68G 45G 21G 69% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
/dev/sdb1 2.8T 2.6T 195G 94% /data

2. Отмонтируем раздел

# umount /data
umount: /data: device is busy

3. Пробуем по другому

# umount -f /data
umount2: Device or resource busy
umount: /data: device is busy

4. Ещё один вариант

# umount -l /data

сейчас всё нормально, кажется раздел отмонтирован
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 68G 45G 21G 69% /
tmpfs 2.0G 0 2.0G 0% /dev/shm

'fsck' этот раздел не берёт, предлагает использовать 'xfs_repair', или 'xfs_check', так и быть, пробуем

5. Проверка раздела на ошибки

# xfs_repair /dev/sdb1
xfs_repair: /dev/sdb1 contains a mounted filesystem
fatal error -- couldn't initialize XFS library

6. Пробуем по другому

# xfs_check /dev/sdb1
xfs_check: /dev/sdb1 contains a mounted and writable filesystem
fatal error -- couldn't initialize XFS library

Выходит не отмонтировалась наша ФС корректно.

7. Примонтируем её обратно

# mount /data

8. Смотрим кто не отпускает

# fuser -vm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root 4567 f.... nautilus
root 4590 f.... trashapplet
root 4890 ..c.. bash

9. Прибиваем

# kill 4567
# kill 4590
# kill 4890

10. Снова отмонтируем ФС

# umount /data

11. Попробуем запустить проверку

# xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- agno = 4
- agno = 5
- agno = 6


Кажется что-то у нас всё таки получилось.

Заметка

Сначала нужно использовать xfs_check, а только после того как он не помогает можно использовать xfs_repair, о чём говорит следующее предупреждение.

# xfs_check -s /dev/sda1
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed.  Mount the filesystem to replay the log, and unmount it before
re-running xfs_check.  If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.

Здесь нам предлагают снова примонтировать ФС, потом отмонтировать и запустить снова xfs_check. Если xfs_check не запустится, то нужно запустить xfs_repair, который должен удалить какой-то лог и исправлять ФС без него. Я к сожалению не большой специалист в XFS.

Использованы материалы:
solarcurve.blogspot.com
discuss.pivotal.io
и ещё что-то.

Добавить комментарий