Был как-то случай когда заканчивалось место у клиента на XFS разделе, клиент не отреагировал.
Получили Input/output error
.
Пришлось исправлять ситуацию.
Опишу что как делать и какие подводные камни можем встретить.
Описание делается на примерах из интернета, реально ситуация была когда свободно было 0 места.
1. Смотрим как называется наш раздел#
1
2
3
4
5
| # 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. Отмонтируем раздел#
1
2
| # umount /data
umount: /data: device is busy
|
3. Пробуем по другому#
1
2
3
| # umount -f /data
umount2: Device or resource busy
umount: /data: device is busy
|
4. Ещё один вариант#
# umount -l /data
сейчас всё нормально, кажется раздел отмонтирован
1
2
3
4
| # 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. Проверка раздела на ошибки#
1
2
3
4
| # xfs_repair /dev/sdb1
xfs_repair: /dev/sdb1 contains a mounted filesystem
fatal error -- couldn't initialize XFS library
|
6. Пробуем по другому#
1
2
3
| # xfs_check /dev/sdb1
xfs_check: /dev/sdb1 contains a mounted and writable filesystem
fatal error -- couldn't initialize XFS library
|
Выходит не отмонтировалась наша ФС корректно.
7. Примонтируем её обратно#
8. Смотрим кто не отпускает#
1
2
3
4
5
6
| # fuser -vm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root 4567 f.... nautilus
root 4590 f.... trashapplet
root 4890 ..c.. bash
|
9. Прибиваем#
1
2
3
| # kill 4567
# kill 4590
# kill 4890
|
10. Снова отмонтируем ФС#
11. Попробуем запустить проверку#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 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
, о чём говорит следующее предупреждение.
1
2
3
4
5
6
7
8
| # 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
и ещё что-то.