Был как-то случай когда заканчивалось место у клиента на 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. Примонтируем её обратно

1
# mount /data

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. Снова отмонтируем ФС

1
# umount /data

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
и ещё что-то.