无法创建文件系统以及无法创建PV时怎么办?

简介:

    我们平常对磁盘分区格式化的时候有时无法格式化,报告的信息为:

1
/dev/sdb3  is apparently  in  use by the system; will not  make  a filesystem here!”

意思是说:似乎系统正在使用该设备,无法创建文件系统。使用【mount】查看系统的所有挂载设备,也没有:/dev/sdb3.但是,创建文件系统的时候。就是无法在该设备上创建文件系统。


    有时候,我们新创建的分区,使用【kpartx -af DIRVE】或【partx -a DIRVE】通知内核重新识别设备的所有分区。使用【cat /proc/partitions】已经识别到新创建的新区,但是创建PV的时候就报错:

1
“Can't  open  /dev/sdb2  exclusively.  Mounted filesystem?”

意思是:不能打开该设备,已经安装过文件系统?

    其实,这些都是由底层Device-Mapper的映射信息还存在导致。所以,格式化分区,创建逻辑卷的时候报错。用户空间通过【dmsetup】接口可以对内核空间的映射做一些管理。

1
2
3
dmsetup   status          显示系统上活动逻辑设备信息
dmsetup   remove  sdb1    移除逻辑设备
dmsetup   remove_all      重置所有逻辑设备

     Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,如:镜像,快照等. 当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(EnterpriseVolume Management System)、dmraid(Device Mapper RaidTool)等都是基于该机制实现的. 只要用户在用户空间制定好映射策略,按照自己的需要编写处理具体IO请求的 target driver插件,就可以很方便的实现这些特性.Device Mapper主要包含内核空间的映射和用户空间的device mapper库及dmsetup工具.

当我们遇到格式化分区和创建PV的时候报错是做如何处理的?

1、创建PV的时候报错的处理过程:

查看设备/dev/sdb的分区情况,准备好了创建PV的分区:/dev/sdb2

1
2
3
4
5
6
7
8
9
10
11
[root@Node1 ~] # fdisk -l /dev/sdb
Disk  /dev/sdb : 21.5 GB, 21474836480 bytes
255 heads, 63 sectors /track , 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical /physical ): 512 bytes / 512 bytes
I /O  size (minimum /optimal ): 512 bytes / 512 bytes
Disk identifier: 0x2c06c001
 
    Device Boot      Start         End      Blocks   Id  System
/dev/sdb1                1          34      273073+  83  Linux
/dev/sdb2               35         296     2104515   8e  Linux LVM

内核要识别到新创建的分区(只有内核可以直接访问硬件),才可以创建PV。

1
2
3
4
5
6
[root@Node1 ~] # cat /proc/partitions | grep "sdb[1-9]?"
major minor   #blocks  name
 
    8       16   20971520 sdb
    8       17     273073 sdb1
    8       18    2104515 sdb2

内核已经识别了,创建pv

1
2
[root@Node1 ~] # pvcreate /dev/sdb2
   Can't  open  /dev/sdb2  exclusively.  Mounted filesystem?

说明:

    创建PV失败。


那么如何,解决设备/dev/sdb2不能创建PV的问题呢?


(1)先:使用【dmsetup】查看系统上逻辑设备的信息。

1
2
3
4
5
6
7
[root@Node1 ~] # dmsetup status
sdb2: 0 4209030 linear  ---------> sdb2 在线
sdb1: 0 546147 linear   ---------> sdb1 在线
vg0-swap: 0 4194304 linear
vg0-root: 0 41943040 linear
vg0-usr: 0 20971520 linear
vg0-var: 0 41943040 linear

(2)、移除磁盘/dev/sdb 上的所有逻辑设备

移除逻辑设备:sdb2

1
[root@Node1 ~] # dmsetup remove sdb2

再次创建PV

1
2
[root@Node1 ~] # pvcreate /dev/sdb2
   Can't  open  /dev/sdb2  exclusively.  Mounted filesystem?

说明:

    创建失败。

再把逻辑设备:/dev/sdb1移除,再创建PV。就创建成功


1
[root@Node1 ~] # dmsetup remove sdb1


(3),当移除成功之后,就可以把/dev/sdb2创建成PV了。

1
2
[root@Node1 ~] # pvcreate /dev/sdb2
   Physical volume  "/dev/sdb2"  successfully created

2、格式化磁盘出现错误的处理过程:

查看设备/dev/sdb的分区情况

1
2
3
4
5
6
7
8
9
10
11
12
[root@Node1 ~] # fdisk -l /dev/sdb
 
Disk  /dev/sdb : 21.5 GB, 21474836480 bytes
255 heads, 63 sectors /track , 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical /physical ): 512 bytes / 512 bytes
I /O  size (minimum /optimal ): 512 bytes / 512 bytes
Disk identifier: 0x2c06c001
 
    Device Boot      Start         End      Blocks   Id  System
/dev/sdb1                1          34      273073+  83  Linux
/dev/sdb2               35        1340    10490445   8e  Linux LVM

把 /dev/sdb2删除,重新创建分区/dev/sdb2.

1
2
3
4
5
6
7
8
9
10
11
12
[root@Node1 ~] # fdisk  -l /dev/sdb
 
Disk  /dev/sdb : 21.5 GB, 21474836480 bytes
255 heads, 63 sectors /track , 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical /physical ): 512 bytes / 512 bytes
I /O  size (minimum /optimal ): 512 bytes / 512 bytes
Disk identifier: 0x2c06c001
 
    Device Boot      Start         End      Blocks   Id  System
/dev/sdb1                1          34      273073+  83  Linux
/dev/sdb2               35        1079     8393962+  83  Linux

通知内核识别新设备,也就是重新读取指定设备的分区表。

1
2
3
[root@Node1 ~] # kpartx -af /dev/sdb
device-mapper: reload ioctl on sdb1 failed: Invalid argument
create /reload  failed on sdb1

查看内核是否识别了,刚才创建的分区/dev/sdb2 

1
2
3
4
5
6
7
8
9
10
[root@Node1 ~] # cat /proc/partitions 
major minor   #blocks  name
 
    8        0   83886080 sda
    8        1     204800 sda1
    8        2   62914560 sda2
    8        3    2103516 sda3
    8       16   20971520 sdb
    8       17     273073 sdb1
    8       18   10490445 sdb2

说明:从上显示结果可以看出。内核还是没有识别新创建的/dev/sdb2 。还是原来的LVM。PV /dev/sdb2


如何解决,通知内核重读,也无法在新的逻辑设备创建文件系统?

(1)、查看逻辑设备的状态

1
2
3
4
5
6
[root@Node1 ~] # dmsetup status
myvg-root: 0 8388608 linear   ----> 卷组 myvg 下的逻辑卷root在线。
vg0-swap: 0 4194304 linear
vg0-root: 0 41943040 linear
vg0-usr: 0 20971520 linear
vg0-var: 0 41943040 linear

(2)、使用【dmsetup】移除逻辑卷 /dev/myvg/root

1
2
[root@Node1 ~] # dmsetup remove /dev/myvg/root
查看系统中的逻辑卷的状态,myvg-root 逻辑设备移除成功
1
2
3
4
5
[root@Node1 ~] # dmsetup status
vg0-swap: 0 4194304 linear
vg0-root: 0 41943040 linear
vg0-usr: 0 20971520 linear
vg0-var: 0 41943040 linear

(3)、重新通知内核识别刚才的磁盘分区

1
2
3
[root@Node1 ~] # kpartx -af /dev/sdb
[root@Node1 ~] # $?
0

说明:

    内核已经识别成功。

(4)、尝试在新建分区/dev/sdb2 创建文件系统

1
2
3
[root@Node1 ~] # mke2fs -t ext4 /dev/sdb2
mke2fs 1.41.12 (17-May-2010)
/dev/sdb2  is apparently  in  use by the system; will not  make  a filesystem here!

说明:

    /dev/sdb2 设备系统正在使用,没法创建文件系统

(5)、查看系统中所有逻辑设备的状态

1
2
3
4
5
6
7
[root@Node1 ~] # dmsetup status
sdb2: 0 16787925 linear
sdb1: 0 546147 linear
vg0-swap: 0 4194304 linear
vg0-root: 0 41943040 linear
vg0-usr: 0 20971520 linear
vg0-var: 0 41943040 linear

(6)移除在线逻辑设备:sdb1、sdb2

1
2
[root@Node1 ~] # dmsetup remove  sdb1
[root@Node1 ~] # dmsetup remove  sdb2

(7)、再查看逻辑设备的状态

1
2
3
4
5
[root@Node1 ~] # dmsetup status
vg0-swap: 0 4194304 linear
vg0-root: 0 41943040 linear
vg0-usr: 0 20971520 linear
vg0-var: 0 41943040 linear

(8)、再格式化磁盘/dev/sdb2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@Node1 ~] # mke2fs -t ext4 /dev/sdb2
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS  type : Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622611 blocks
131130 blocks (5.00%) reserved  for  the super user
First data block=0
Maximum filesystem blocks=2688548864
81 block  groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks:
         32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
 
Writing inode tables:  done
Creating journal (32768 blocks):  done
Writing superblocks and filesystem accounting information:  done
 
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

(9)、格式化/dev/sdb2设备成功。

1
2
[root@Node1 ~] # echo $?
0

总结:

   如果分区格式磁盘和创建PV等操作逻辑设备的时候,如果失败的话。设备没有挂载使用的情况下。先使用【dmsetup status】查看逻辑设备的状态。如果有被操作的逻辑设备在线的话,就使用【dmsetup remove DEVICE】移除掉。再操作逻辑设备,一般不是有问题了。




     本文转自成长的小虫 51CTO博客,原文链接:http://blog.51cto.com/9528du/1444987,如需转载请自行联系原作者


相关文章
|
Linux 测试技术
非LVM磁盘分区根目录扩容操作参考
在操作系统部署时,根目录使用的是非LVM分区,后期空间不足又无法扩容。 提供一个思路是新增一块硬盘,创建为逻辑卷,把根目录迁移过去,然后引导以新分区启动。 迁移完成后,旧的根目录可以再格式化为逻辑卷,合并到新磁盘分区。 本操作仅在CentOS Linux release 7.9.2009实验过,其他环境可能不支持。
2846 0
|
安全 Linux 网络安全
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
|
10月前
|
机器学习/深度学习 存储 安全
4G手机内存玩转Qwen2.5-Omni?MNN全面支持Qwen2.5-Omni与Qwen3!
随着移动端算力、存储能力的提升,在端侧部署大模型已成为趋势。本地化运行可消除网络延迟实现毫秒响应,降低云端算力成本,同时避免数据上传保障隐私安全。
2106 1
|
12月前
|
数据采集 安全 网络安全
动态HTTP代理与静态HTTP代理:优缺点详析
HTTP代理服务在网络安全、数据获取及访问控制中扮演重要角色,主要分为动态和静态两种形式。动态HTTP代理通过频繁更换IP地址提供高度匿名性和灵活性,适用于网络爬虫、社交媒体管理和网络安全等场景,但存在连接不稳定和安全性问题。静态HTTP代理则提供固定IP地址,确保长期稳定连接,适合远程办公、跨境电商和SEO优化,但易被封禁且灵活性差。用户应根据需求选择合适的代理类型,并确保合法合规使用。
256 1
|
SQL 安全 网络安全
SQL安装程序规则错误解决方案
在安装SQL Server时,遇到安装程序规则错误是一个比较常见的问题
|
人工智能 JavaScript 开发工具
Awesome Tools,程序员常用高效实用工具、软件资源精选,办公效率提升利器!
Awesome Tools,程序员常用高效实用工具、软件资源精选,办公效率提升利器!
650 0
|
分布式计算 安全 Hadoop
Hadoop 集群一直处于安全模式,强制退出后出现数据丢失警告。解决方法
本文介绍了Hadoop集群安全模式的相关命令和问题解决。当集群处于安全模式时,可使用`hdfs dfsadmin -safemode get`检查状态,`enter`进入,`leave`或`forceExit`离开。若因数据块不一致导致安全模式持续,可通过强制退出,然后删除丢失数据块的文件以恢复正常。如果遇到权限问题,可以使用`chmod`授权或关闭HDFS权限验证(不推荐),配置修改后需重启集群生效。
1996 0
Hadoop 集群一直处于安全模式,强制退出后出现数据丢失警告。解决方法
|
存储 Kubernetes 监控
【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解
【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解
|
自然语言处理 算法
文本分析-使用jieba库实现TF-IDF算法提取关键词
文本分析-使用jieba库实现TF-IDF算法提取关键词
1162 1
|
Linux
Linux——系统扩容根目录磁盘空间、磁盘扩容的操作方法
Linux根目录磁盘空间不够用了,当修改了虚拟机模版增加磁盘大小或者插入了一块新硬盘,但是发现系统里的大小还是没改变。 产生的原因是没有给磁盘格式化,没有增加分区。
5278 0

热门文章

最新文章