使用mkfs创建文件系统

计算弹性计算技术服务知识库
问题概述

lvm卷上创建新的文件系统时,mkfs.xfsmkfs.ext4命令都会在ioctl()系统调用上暂停。操作系统挂起,没有响应。

解决办法

在创建文件系统时候,加入-K的参数,在创建时禁止用块丢弃,详细的参数说明参考如下:

-K     Keep, do not attempt to discard blocks at mkfs time 
             (discarding blocks initially is useful on solid 
             state devices and sparse / thin-provisioned storage).

命令示例如下:

mkfs.ext4 -K </dev/mapper/path_to_lvm_volume> # For ext4 filesystem
mkfs.xfs -K </dev/mapper/path_to_lvm_volume> # For XFS filesystem
根本原因

mkfs命令在磁盘上发出块丢弃命令,但底层存储设备无法处理它。

诊断步骤

收集 mkfs 命令的 strace 日志:

*strace -f -tt -y -T -v -x -o /tmp/mkfs.out -s 4096 <mkfs command>

mkfs.xfs命令的 strace 日志mkfs.ext4显示该命令在发出 ioctl 后挂起0x1277

 tail -2 mkfs.txt 
 1538 08:59:41.724086 write(1, "\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08", 13) = 13 <0.000053> 1538 08:59:41.724209 ioctl(3, 0x1277 <-------- hung after this [...]

从内核源码来看,0x1277ioctl 对应于BLKDISCARD

 include/linux/fs.h: 
 ------------------ 
 344 #define BLKDISCARD _IO(0x12,119) [...]

mkfs命令向磁盘发出块丢弃命令,但磁盘设备不支持该命令,这导致在第一个片段中观察到 IO 错误,然后将其记录下来。

51
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论