今天在做环境中一台机器磁盘扩容过程中出现此报错,第一次遇到,说一下情况:
1、我的机器中原本有一个LV 500G,作为nova节点的存储空间,空间不够,想扩容1T,浪潮服务器,加入两块1T磁盘,跟之前两个600G盘一样,做RAID1;(注:此动作需要重启服务器,要做追加,把新加的盘做raid,否则会对之前数据产生不利影响)
2、加入之后开机,发现sdb,执行fdisk,保存退出:
3、此时 fdisk -l 或lsblk 发现sdb1,执行partprobe,重新发现分区表;
4、做pv:执行pvcreate,然后报错Device /dev/sdb not found (or ignored by filtering)。
百度此报错,说法一:“这是由于挂了盘却没有格式化”,
亲测挂一块裸盘分区后不格式化,依旧能够执行pvcreate /dev/sdb1命令,可见这种说法并不能解决,在格式化之前执行pvcreate 命令并不会有问题(Centos7)。
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─centos-root 253:0 0 17.5G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk sr0 11:0 1 1024M 0 rom
[root@localhost ~]# fdisk /dev/sdb 分区转换8e之后
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─centos-root 253:0 0 17.5G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk └─sdb1 8:17 0 30G 0 part sr0 11:0 1 1024M 0 rom [root@localhost ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
百度报错说法二:执行以下步骤可以解决。
实验后发现,这个也无法解决。
先执行:
1 # dd if=/dev/urandom of=/dev/sdb bs=512 count=64后再次执行
1 # pvcreate /dev/sdbdd if=/dev/urandom是提供永不为空的随机字节数据流,以上命令是把/dev/sdb覆盖分区块,也就是擦除分区,然并卵。
[root@localhost ~]# dd if=/dev/urandom of=/dev/sdb bs=512 count=64 记录了64+0 的读入 记录了64+0 的写出 32768字节(33 kB)已复制,0.015772 秒,2.1 MB/秒 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─centos-root 253:0 0 17.5G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk sr0 11:0 1 1024M 0 rom
百度说法三:按照错误说法,既然已经找到了/dev/sdb1,那肯定就是括号中的原因: ignored by filtering,实验发现确实如此。
解决方案:
(1)找到lvm配置文件:vim /etc/lvm/lvm.conf,搜索找到devices字段中filter
devices { # Configuration option devices/dir. # Directory in which to create volume group device nodes. # Commands also accept this as a prefix on volume group names. # This configuration option is advanced. dir = "/dev" # Configuration option devices/scan. # Directories containing device nodes to use with LVM. # This configuration option is advanced. scan = [ "/dev" ]
。。。。。。。。。。。。。。。。。。。。。。。
# Accept every block device: # filter = [ "a|.*/|" ] # Reject the cdrom drive: # filter = [ "r|/dev/cdrom|" ] # Work with just loopback devices, e.g. for testing: # filter = [ "a|loop|", "r|.*|" ] # Accept all loop devices and ide drives except hdc: # filter = [ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ] # Use anchors to be very specific: # filter = [ "a|^/dev/hda8$|", "r|.*/|" ] # # This configuration option has an automatic default value. # filter = [ "a|.*/|" ] # Configuration option devices/global_filter. # Limit the block devices that are used by LVM system components. # Because devices/filter may be overridden from the command line, it is # not suitable for system-wide device filtering, e.g. udev and lvmetad. # Use global_filter to hide devices from these LVM system components. # The syntax is the same as devices/filter. Devices rejected by # global_filter are not opened by LVM. # This configuration option has an automatic default value. global_filter = [ "a|/dev/sda7|", "r|.*/|" ]
找到global_filter一行发现,此filter允许(a)/dev/sda7,拒绝(r)其他所有此目录下名称(如上,此目录为dir=/dev下),
bingo,问题就出在这里,/dev/sdb/在这里被过滤掉了,因此不搜索。
解决之道就出来了,在此行【】中添加:“a|sdb1|”,注意不能用/dev/sdb1,因为/dev/已经有了,就是上面说的dir=/dev/。
之后再执行pvcreate命令,通过,问题解决。
