我是一名长期用户,也是第一次提交问题。我花了一整天时间在这个网站和许多其他网站上寻找解决方案,但我不得不求助于寻求帮助来解决我的问题。
历史:我们的 HP Proliant、Centos 5.9 服务器昨天在没有正确关闭程序的情况下关闭了电源。从那时起,/home 分区一直处于我们无法对其进行 fsck、挂载或卸载的状态。umount 表示它尚未挂载,但 mount/fsck 表示它正忙或已挂载。这最初导致服务器无法启动。我们最终从 /etc/fstab 中删除了磁盘/分区,以便启动不会失败。
# mount -t ext3 /dev/cciss/c0d0p1 /home
mount: /dev/cciss/c0d0p1 already mounted or /home busy
# fsck /dev/cciss/c0d0p1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
fsck.ext3: Device or resource busy while trying to open /dev/cciss/c0d0p1
Filesystem mounted or opened exclusively by another program?
如您所见,磁盘未以任何方式安装。
df 输出:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/cciss/c0d1p3 198381228 24920704 163220696 14% /
/dev/cciss/c0d1p2 267818128 191652 253802544 1% /logs
/dev/cciss/c0d1p1 194442 33575 150828 19% /boot
tmpfs 49495044 0 49495044 0% /dev/shm
安装输出:
# mount
/dev/cciss/c0d1p3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/cciss/c0d1p2 on /logs type ext3 (rw)
/dev/cciss/c0d1p1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/etc/fstab
# cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/logs /logs ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SW-cciss/c0d1p5 swap swap defaults 0 0
/etc/mtab
# cat /etc/mtab
/dev/cciss/c0d1p3 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/cciss/c0d1p2 /logs ext3 rw 0 0
/dev/cciss/c0d1p1 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
/proc/mounts
# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw,data=ordered 0 0
/dev /dev tmpfs rw 0 0
/proc /proc proc rw 0 0
/sys /sys sysfs rw 0 0
/proc/bus/usb /proc/bus/usb usbfs rw 0 0
devpts /dev/pts devpts rw 0 0
/dev/cciss/c0d1p2 /logs ext3 rw,data=ordered 0 0
/dev/cciss/c0d1p1 /boot ext3 rw,data=ordered 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
/etc/auto.misc /misc autofs rw,fd=7,pgrp=9694,timeout=300,minproto=5,maxproto=5,indirect 0 0
-hosts /net autofs rw,fd=13,pgrp=9694,timeout=300,minproto=5,maxproto=5,indirect 0 0
lsof
# lsof /dev/cciss/c0d0p1
#
定影器
# fuser /dev/cciss/c0d0p1
#
fdisk -l
# fdisk -l /dev/cciss/c0d0
Disk /dev/cciss/c0d0: 1800.2 GB, 1800280694784 bytes
255 heads, 63 sectors/track, 218871 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/cciss/c0d0p1 * 1 218871 1758081276 83 Linux
根据网络上的其他建议,我们使用 ILO3 远程终端从 Centos LiveCD 启动。当我们这样做时,我们能够挂载/卸载、fsck、分区,没有任何错误或问题。(即:磁盘本身没有问题)。
我们还使用“debugfs”对日志 Inode <8> 执行了 Inode 清除。然后,fsck 重新构建了日志,没有出现错误。同样,在启动 LiveCD 时,我们能够毫无问题地挂载/卸载磁盘。
当我们切换回正常启动分区时,我们又回到了同一个位置,由于操作系统认为该分区正忙,因此无法挂载或 fsck。
我想了解 Linux 中还有什么其他信息可以表明该磁盘正在使用中。可以使用哪些其他实用程序来查找并清除它?
任何帮助是极大的赞赏。
根据要求提供其他信息:
/home 上的 lsof 和 fuser,以及显示 /home 内容和目录权限。
# lsof /home
# fuser /home
# ls -la /home
total 16
drwxr-xr-x 2 root root 4096 Mar 15 2013 .
drwxr-xr-x 27 root root 4096 Nov 19 08:31 ..
# ls -l / | grep home
drwxr-xr-x 2 root root 4096 Mar 15 2013 home
#
mount -o remount 失败,因为自最近一次启动以来,此分区尚未挂载。(自服务器安装以来,这是一个工作分区,仅在昨天硬重启后才出现此问题)。
# mount -o remount -t ext3 /dev/cciss/c0d0p1 /home
mount: /home not mounted already, or bad option
我可以将此分区重新添加到 /etc/fstab,并在需要时重新启动。
2013/11/19 上午 11:12 美国中部标准时间
dmsetup 输出:
# dmsetup table
mpath0: 0 3516173232 multipath 1 queue_if_no_path 0 1 1 round-robin 0 1 1 104:0 1000
mpath0p1: 0 3516162552 linear 253:0 63
# dmsetup info
Name: mpath0
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 1
Event number: 1
Major, minor: 253, 0
Number of targets: 1
UUID: mpath-3600508b1001cb6e6453d25c4052abca5
Name: mpath0p1
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 1
Number of targets: 1
UUID: part1-mpath-3600508b1001cb6e6453d25c4052abca5
lsof-n 命令
# lsof -n | grep /home
#
最终解决方案:
# multipath -ll
mpath0 (3600508b1001cb6e6453d25c4052abca5) dm-0 HP,LOGICAL VOLUME
[size=1.6T][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
\_ #:#:#:# cciss!c0d0 104:0 [active][ready]
# multipath -F
# multipath -ll
#
# mount -t ext3 /dev/cciss/c0d0p1 /home
# cat /proc/mounts | grep home
/dev/cciss/c0d0p1 /home ext3 rw,data=ordered 0 0
答案1
它可能正在被设备映射器使用。
使用 检查设备映射表dmsetup table
。如果在里面,请使用 清除映射dmsetup remove <name>
。
dmesg
如果没有,也请查找错误。
# dmsetup table
mpath0: 0 3516173232 multipath 1 queue_if_no_path 0 1 1 round-robin 0 1 1 104:0 1000
mpath0p1: 0 3516162552 linear 253:0 63
啊哈!多路径已认领磁盘。运行后即可看到multipath -ll
。
运行:multipath -F
刷新所有未使用的地图,然后multipath -ll
不应输出任何内容。
或者,直接使用/dev/mapper/mpath0p1
而不是/dev/cciss/c0d0p1
。
答案2
关于故障排除过程,当尝试 lsof 或 fuser 时,不要只检查相关分区 - 直接检查磁盘。这很快就会引导您找到正确的解决方案:
坏的:
fuser /dev/cciss/c0d0p1
好的:
fuser /dev/cciss/c0d0
坏的:
lsof /dev/c0d0p1
好的:
lsof /dev/ | grep c0d0
答案3
将现有 SAN LUN 克隆到新服务器后,我刚刚遇到了这个问题。我的解决方案是:
- 进入维护模式
mount -o remount,rw /dev/sda1
(其中 sda1 代表您遇到的问题)- 删除/移动
/etc/blkid/blkid.tab
服务器随后启动。
答案4
从我自己的经验来说。还要检查您的 fstab,以确保您尝试将设备安装为其逻辑卷,而不是您提供的别名或正在使用的 /etc/multipath/bindings。