关于linux硬盘经常出现的几个问题的解决方案

关于linux硬盘经常出现的几个问题的解决方案

mount.nfs: Stale file handle

错误原因:

此错误一般出现在使用NFS共享的目录,挂载时出现了问题。且大部分情况都是之前挂载成功过,因为服务端或者客户端重启,更换硬盘等造成的。

#mount -t nfs -o rw 192.168.0.108:/mnt/HD2 /mnt/NAS/HD2/
#mount.nfs: Stale file handle

前提

  1. 首先保证服务端硬盘状态正常,如果出现无法读取超级快,或者无法挂载等问题,请参照此帖其他解决方案,解决完成再解决无法挂载NFS目录的问题。
  2. 其次保证你之前成功使用NFS挂载过,且可以使用,后因其他问题造成不能使用。
  3. 保证服务端及客户端的NFS-SERVER和rpcbind服务正常启动。

解决方案

  1. 重新挂载
    有可能客户端还没有卸载挂载时,服务端那里就更改了路径或者更改了挂载状态造成,使用重新挂载新目录可以解决。
    如果取消挂载时出现设备忙问题请参考此贴另一问题:umount: /mnt/HD2: target is busy
#mount		\\查看挂载信息
vmware-vmblock on /run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=388052k,mode=700)
192.168.0.108:/mnt/HD1 on /mnt/NAS/HD1 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.22,local_lock=none,addr=192.168.0.108)
192.168.0.108:/mnt/HD2 on /mnt/NAS/HD2 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.22,local_lock=none,addr=192.168.0.108)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
#umount /mnt/NAS/HD2		\\卸载挂载点
#mount -t nfs -o rw 192.168.0.108:/mnt/HD2 /mnt/NAS/HD2/	\\重新挂载
#df -Th		\\查看挂载情况,T显示分区类型 h显示容量单位
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        46G   11G   35G   23% /
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G  154M  1.8G    9% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  233M  782M   23% /boot
tmpfs                   tmpfs     379M     0  379M    0% /run/user/0
192.168.0.108:/mnt/HD1  nfs4      3.6T  265M  3.4T    1% /mnt/NAS/HD1
192.168.0.108:/mnt/HD2  nfs4      3.6T   27G  3.4T    1% /mnt/NAS/HD2
  1. 重启服务及客户端
    服务端因为更改过硬盘状态 inode索引标识也发生了改变,但是nfs-server服务记录的状态还未更新,所以我们通过重启服务以达到重新加载的效果。
    重启操作先在客户端进行,如还无法解决再在服务端进行。
# systemctl status nfs-server		\\查看NFS服务启动情况
● nfs-server.service - NFS server and services
   Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)		\\正常运行
   Active: active (exited) since Fri 2019-09-20 19:36:09 CST; 14h ago
  Process: 383 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 381 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 383 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/nfs-server.service
#systemctl restart nfs-server		\\重启nfs服务
#systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sat 2019-09-21 10:31:18 CST; 4s ago
  Process: 1590 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 1588 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 1585 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 1608 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 1605 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 1608 (code=exited, status=0/SUCCESS)		\\PID发送变化,重启成功。
#showmount -e 192.168.0.108		\\客户端执行:查看NFS服务端共享的目录
Export list for 192.168.0.108:
/mnt/HD2 192.168.0.22
/mnt/HD1 192.168.0.22
#mount -t nfs -o rw 192.168.0.108:/mnt/HD2 /mnt/NAS/HD2/	\\挂载目录
#df -Th		\\查看挂载情况
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   46G   11G   35G   23% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G  154M  1.8G    9% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1               1014M  233M  782M   23% /boot
tmpfs                    379M     0  379M    0% /run/user/0
192.168.0.108:/mnt/HD1   3.6T  265M  3.4T    1% /mnt/NAS/HD1
192.168.0.108:/mnt/HD2   3.6T   27G  3.4T    1% /mnt/NAS/HD2

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,

missing codepage or helper program, or other error

In some cases useful info is found in syslog - try
dmesg | tail or so.

错误原因:

不支持的文件类型,或者因为硬盘硬件的损伤导致的问题。

  • 与问题:mount: /dev/sdb1: can't read superblock关联
# mount /dev/sdb1 /mnt/HD2
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

前提:待定

解决方案:

  1. 安装nfs-common
    未支持的文件类型,安装对应依赖即可。
#apt-get install nfs-common
  1. 重启
    因为某种原因系统未能识别硬盘,或因为某种原因造成的掉盘现象,重启以实现重新加载该硬盘的目的。
#fdisk -l			\\查看设备上的所有硬盘信息,如果无法查看到指定硬盘必须得检测硬盘是否已经硬件损坏或者没有供电等问题。
Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0A1C2B96-B7C2-42A5-9447-21787120DFBF

Device     Start        End    Sectors  Size Type
/dev/sda1   2048 7814037134 7814035087  3.7T Linux filesystem


Disk /dev/sdb: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 07C3D708-AB93-4232-915C-12B790D7E0C1

Device     Start        End    Sectors  Size Type
/dev/sdb1   2048 7814037127 7814035080  3.7T Linux filesystem
#shutdown -r now			\\向所有进程发出关闭的信号,并重新启动系统。
  1. 使用fsck修复文件系统
    因为某种原因造成分区表异常无法读取或者损坏,索引节点信息丢失损坏等问题,但是硬盘本身没有硬件故障,可以使用fsck修复该分区。
#fdisk -l 				\\查看所有硬盘信息
Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0A1C2B96-B7C2-42A5-9447-21787120DFBF

Device     Start        End    Sectors  Size Type
/dev/sda1   2048 7814037134 7814035087  3.7T Linux filesystem


Disk /dev/sdb: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 07C3D708-AB93-4232-915C-12B790D7E0C1

Device     Start        End    Sectors  Size Type
/dev/sdb1   2048 7814037127 7814035080  3.7T Linux filesystem
#fsck -t ext4 /dev/sdb1				\\修复分区/dev/sdb1
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)

/dev/sdb1:正在修复日志
JBD2: Invalid checksum recovering block 4 in log
在 /dev/sdb1 中发现日志校验值错误
/dev/sdb1 未被彻底卸载,强制进行检查。
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
可用块数错误(0,实际为0)
处理<y>? 是
可用inode数错误(244183133,实际为244183130)
处理<y>? 是

/dev/sdb1:***** 文件系统已修改 *****
/dev/sdb1:12198/244195328 文件(0.0% 为非连续的), 22578694/976754385 块
#mount /dev/sdb1 /mnt/HD2
#df -Th
文件系统       类型      容量  已用  可用 已用% 挂载点
udev           devtmpfs  867M     0  867M    0% /dev
tmpfs          tmpfs     176M  3.4M  173M    2% /run
/dev/mmcblk0p1 ext4      3.6G  1.6G  1.8G   47% /
tmpfs          tmpfs     878M     0  878M    0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M    0% /run/lock
tmpfs          tmpfs     878M     0  878M    0% /sys/fs/cgroup
tmpfs          tmpfs     176M     0  176M    0% /run/user/1000
/dev/sda1      ext4      3.6T  265M  3.4T    1% /mnt/HD1
tmpfs          tmpfs     176M     0  176M    0% /run/user/0
/dev/sdb1      ext4      3.6T   27G  3.4T    1% /mnt/HD2	\\挂载成功

umount: /mnt/HD2: target is busy

或者
umount: /mnt/sdb: device is busy

    (In some cases useful info about processes that
     use the device is found by lsof(8) or fuser(1).)

或者
unmount error 16 = Device or resource busy

错误原因:

该分区中的文件或者文件夹被用户占用,故无法直接卸载。

# umount /mnt/HD2
umount: /mnt/HD2: target is busy
        (In some cases useful info about processes that
         use the device is found by lsof(8) or fuser(1).)

前提:

硬盘无硬件故障

解决方案:

  1. umount -l /mnt/HD2
    使用-l选项进行延迟卸载(lazy unmount)会立即卸载目录树里的文件系统,等到设备不再繁忙时才清理所有相关资源。
# umount -l /mnt/HD2/
# mount		\\查看卸载情况
/dev/sda1 on /mnt/HD1 type ext4 (rw,relatime,data=ordered)
  1. fuser -kmi /mnt/HD2
    使用fuser结束或者查看正在占用分区的进程号,并杀死。
    其中k是结束 m是查看 i是结束前进行确认。
# fuser -m /mnt/HD2/		\\查看占用情况
/mnt/HD2:                1rce     2rce     3rce     5rce     7rce     8rce     9rce    10rce    11rce    12rce    13rce    15rce    16rce    17rce    18rce    20rce    21rce    22rce    23rce    25rce    26rce    27rce    28rce    29rce    30rce    31rce    32rce    33rce    34rce    35rce    36rce    37rce    38rce    39rce    42rce    43rce    44rce    45rce    61rce    62rce    64rce    65rce    66rce    67rce    68rce    69rce    70rce    71rce    72rce    73rce    74rce    75rce    76rce    77rce    78rce    79rce    80rce    81rce    82rce    83rce    84rce    85rce    86rce    87rce    88rce    96rce   109rce   110rce   147rce   148rce   149rce   150rce   153rce   155rce   156rce   157rce   158rce   159rce   160rce   161rce   162rce   163rce   164rce   174rce   193rce   194rce   218rce   230rce   232rce   240rce   241rce   242rce   255rce   259rce   288rce   291rce   293rce   305rce   315rce   316rce   319rce   320rce   321rce   324rce   325rce   326rce   327rce   369rce   372rce   377rce   380rce   387rce   388rce   396rce   398rce   399rce   400rce   401rce   402rce   403rce   404rce   405rce   421rce   425rce   781rce   803rce   806rce   807rce   828rce   829rce   830rce   832rce   833rce   846rce   875rce   876rce   877rce   881rce   901rce   993re  1778rce  1812rce  1890rce  2008rce  2293rce  2396rce  2433rce  2507rce  2508rce  2517rce  2521rce  2556rce  2557rce  2561rce  2562rce  2564rce  2565rce  2571rce
# fuser -km /mnt/HD2		\\杀死占用进程
# mount		\\查看卸载情况
/dev/sda1 on /mnt/HD1 type ext4 (rw,relatime,data=ordered)

mount: /dev/sdb1: can't read superblock

错误原因:

因为热插拔 断电或者硬盘损伤造成的错误。硬盘体质较差,或者硬盘工作环境温度过高过低,或者没有良好的休眠计划也会导致硬盘硬件损坏。

  • 与问题:mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
    missing codepage or helper program, or other error关联

前提:

硬盘无完全损坏,坏道太多也无法修复。

解决方案

  1. 重新挂载
    部分情况有可能是机器系统的问题,经常出现掉盘的情况。重启后重新挂载可以解决。
#fdisk -l		\\查看设备情况
Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0A1C2B96-B7C2-42A5-9447-21787120DFBF

Device     Start        End    Sectors  Size Type
/dev/sda1   2048 7814037134 7814035087  3.7T Linux filesystem
\\只有一块硬盘,另一块硬盘已经无法识别了
#shutdown -r now	\\重新启动设备

待定


资料:

Linux数据恢复专题——恢复丢失的分区
解决八种Linux硬盘问题的技巧
(推荐)linux操作系统故障处理-ext4文件系统超级块损坏修复
Linux上的 LVM 灾难修复,VG在系统间移动
Linux的inode

# Linux 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×