本人linux小菜,现遇到要在linux下对磁盘进行热插拔的问题,求高人指教!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本人linux小菜,现遇到要在linux下对磁盘进行热插拔的问题,求高人指教!!!相关的知识,希望对你有一定的参考价值。

要求:
1.正在读写文件时拔下硬盘要能被感知到,并报出相关错误,
2.最好能在硬盘插回去后又能继续自动挂载上,
3.如果不能自动挂载,那如何感知硬盘是否挂载正常。

现在在一有8块硬盘组成RAID阵列的机器上测试,发现只要拔出一块儿磁盘再插上就不能正常工作了,但查看发现还是挂载着的,只是那个挂载点不能进行正常文件操作,其他磁盘都能正常工作。

求高人指教啊!!!

fstab里面加进去了那些盘的,重启都不行,重启或umount后用fdisk -l命令就直接连那块儿盘都找不着了,也就没有办法mount了……直接拔出会把配置信息丢失,需要重新配置才能再挂载上……

今天再测试发现正在读写时拔出盘会报错:input/output error,再插上去也是报一样的错误,但RAID里其他盘都还能正常工作。我现在想做的是怎么样能让它和windows下的 U 盘或移动硬盘一样实现自动挂载,也就是拔下时报个错,但插上去之后又能自动挂载上并且正常工作。

RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能

RAID 1又称为Mirror或Mirroring,它的宗旨是最大限度的保证用户数据的可用性和可修复性。 RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而,Mirror的磁盘空间利用率低,存储成本高。

Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域。

RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低。

一般做冗余不会用0了,也不支持热插拔,装系统时可以选择磁盘类型的
参考技术A 普通的台式机得用raid卡。
一般刀片机和小机口自带raid卡。
建议用sas口,然后对磁盘组做raid(1、0+1、1+0)等。这样就可以热拔插了。追问

这台机器自带的RAID卡,之前被做成RAID0 的,硬盘有四块是SATA口的,四块SAS口的,能不能具体说下该怎么样才能实现热插拔啊????

追答

我不知道你的服务器是什么型号的。在开机时你可以按快捷键建立raid。做0+1或1+0时,指定sata和sas口做成一个raid,这样你就可以热拔插sas口那块硬盘了。

追问

服务器是宝德pr2510n,很挫的那款,机子RAID是之前厂家的技术人员配置的,现在每次拔下来都得重新配置RAID信息,另外你说的热插拔是插上去能自动挂载么???

参考技术B 难道你用的是RAID0吗?
理论上用其他任何Raid方式都不会出现这种状况的。追问

好像还真是RAID0,那RAID0下能解决热插拔么,还有其他的RAID形式是不是支持热插拔啊???

追答

Raid0 下损失任何一块硬盘都会造成系统故障。 Raid 0 没有任何的安全作用,就和没做Raid一样。
其他的Raid 至少在损失一块硬盘的情况下系统不会有任何故障。
Raid 1 支持一般的硬盘故障,你有8块硬盘的话,可以坏4块都没关系
Raid 5 只支持一块硬盘故障
Raid 6 支持两块硬盘故障。

通常都采用Raid 5,兼顾容量与读写效率

追问

我所说的不是它的容错能力,而是能够实现热插拔,即在读写过程中拔下硬盘报错,但插上后又能自动挂载,继续工作,这个该怎么实现???
而且目前测试的情况是拔出一块儿盘其他的盘还能正常工作,不知道重启后重新挂载时其他盘会不会出问题……

追答

理论上Raid0 拔出任何一块硬盘都会造成系统宕机,不支持热插拔,可能是损失的数据不是Linux的系统数据。所以系统还没有崩溃。
Raid0没有数据自动修复功能。数据没有办法再恢复了。以后做系统注意一点吧。也算经验教训了。

本回答被提问者采纳
参考技术C

LVM

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。分为lvm,lvm2两个版本。

lvm2使用dm(device mapper模块),将一个或多个底层设备组织成一个逻辑的工具

底层可以是任何块设备,可以是分区、raid

pe:物理盘区,pysical extent

技术分享

存储空间边界:

    物理边界:

    逻辑边界:

    

    逻辑卷:

        扩展:先物理,后逻辑

        缩减:先逻辑,后物理

                缩减不能少于已经存储的数据空间大小


快照卷也可以挂载到某个访问点

快照卷在刚创建时没有数据,访问快照卷其实是映射到原卷上了,其实是访问原卷的第二个通路。

如果改变原卷的数据,原卷上的数据在改之前,会复制到快照卷,所以快照卷不必和原卷一样大

快照卷没有永存的目的,只是备份

pv:

    pvcreate,pvs,pvdisplay,pvremove,pvmove,pvscan,

vg:

    vgcreate,vgs,vgdisplay,vgremove,vgextend,vgreduce,vgscan

lv:

    lvcreate,lvs,lvdisplay,lvremove,lvextend,lvreduce,lvscan


实验:创建10G的vg

[[email protected] ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x6f1459ef.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
         switch off the mode (command ‘c‘) and change display units to
         sectors (command ‘u‘).

Command (m for help): p

Disk /dev/sdb: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 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: 0x6f1459ef

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15665, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +3G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (394-15665, default 394): 
Using default value 394
Last cylinder, +cylinders or +size{K,M,G} (394-15665, default 15665): +7G

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

查看分区:

[[email protected] ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0  125829120 sda
   8        1     204800 sda1
   8        2   10240000 sda2
   8        3     512000 sda3
   8        4          1 sda4
   8        5  114870272 sda5
   8       16  125829120 sdb
   8       17    3156741 sdb1
   8       18    7349737 sdb2

创建pv:

[[email protected] ~]# pvcreate  /dev/sdb{1,2}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[[email protected] ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 ---  3.01g 3.01g
  /dev/sdb2       lvm2 ---  7.01g 7.01g
[[email protected] ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "3.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               3.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               f3ko3z-2YZ8-ghkh-jPOE-C3RI-AKVi-Z5Hjkm
   
  "/dev/sdb2" is a new physical volume of "7.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               7.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               KsP0wm-X0KJ-ZkwP-3l3G-lVAA-peS0-UjmRoN

创建vg:

vgcreate [-s N[mgt]] VG名称  物理设备路径,-s指定pe大小

[[email protected] ~]# vgcreate myvg /dev/sdb1
  Volume group "myvg" successfully created
[[email protected] ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   1   0   0 wz--n- 3.01g 3.01g
[[email protected] ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               myvg
  PV Size               3.01 GiB / not usable 2.75 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              770
  Free PE               770
  Allocated PE          0
  PV UUID               f3ko3z-2YZ8-ghkh-jPOE-C3RI-AKVi-Z5Hjkm

扩展vg:

[[email protected] ~]# vgextend myvg /dev/sdb2
  Volume group "myvg" successfully extended
[[email protected] ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   2   0   0 wz--n- 10.02g 10.02g


lvcreate:

    -n:lv_name

    -L:size[mMgGtT]

    VG_NAME

[[email protected] ~]# lvcreate -L 2G -n mylv myvg
  Logical volume "mylv" created
[[email protected] ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 2.00g

逻辑卷被映射为一个设备:

[[email protected] ~]# ll /dev/mapper/
total 0
crw-rw---- 1 root root 10, 58 Dec 17 17:52 control
lrwxrwxrwx 1 root root      7 Dec 17 18:09 myvg-mylv -> ../dm-0

逻辑卷的2个访问路径:

/dev/vg_name/lv_name

/dev/mapper/vg_name-lv_name

此二者均为符号链接,指向的文件为/dev/dm-#

[[email protected] ~]# ll /dev/mapper/myvg-mylv 
lrwxrwxrwx 1 root root 7 Dec 17 18:09 /dev/mapper/myvg-mylv -> ../dm-0
[[email protected] ~]# ll /dev/myvg/mylv
lrwxrwxrwx 1 root root 7 Dec 17 18:09 /dev/myvg/mylv -> ../dm-0

分区、格式化:

[[email protected] ~]# mke2fs -t ext4 /dev/myvg/mylv
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
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[[email protected] ~]# mkdir /data
[[email protected] ~]# mount /dev/myvg/mylv /data
[[email protected] ~]# cd /data
[[email protected] data]# ls
lost+found
[[email protected] data]# mount
/dev/sda5 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda2 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/myvg-mylv on /data type ext4 (rw)

查看:

[[email protected] data]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-ao---- 2.00g                                                    
[[email protected] data]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  myvg   2   1   0 wz--n- 10.02g 8.02g

复制数据:

[[email protected] data]# cp /etc/rc.d/rc.sysinit /data
[[email protected] data]# ls
lost+found  rc.sysinit

扩展:

1、先确定扩展的目标大小,并确保对应的卷组中有足够的空闲空间可用

2、扩展物理边界lvextend

3、扩展逻辑边界resize2fs

[[email protected] data]# lvextend -L 4G /dev/myvg/mylv
  Size of logical volume myvg/mylv changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
  Logical volume mylv successfully resized
[[email protected] data]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             108G  1.3G  101G   2% /
tmpfs                  84M     0   84M   0% /dev/shm
/dev/sda1             190M   25M  156M  14% /boot
/dev/sda2             9.5G   22M  9.0G   1% /home
/dev/mapper/myvg-mylv
                      2.0G  3.1M  1.9G   1% /data
[[email protected] data]# resize2fs /dev/myvg/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /data; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 1048576 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1048576 blocks long.

缩减:很危险,生产环境一般不缩减,缩减不能在线缩减。

1、先确定缩减后的目标大小,并确保对应的目标逻辑卷大小中有足够的空间可容纳原所有数据

2、先卸载文件系统,并要执行强制检测(e2fsck -f)

3、缩减逻辑边界resize2fs device 3G

4、缩减物理边界lvreduce

[[email protected]node1 data]# cd
[[email protected] ~]# umount /data
[[email protected] ~]# e2fsck -f /dev/myvg/mylv 
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 12/262144 files (0.0% non-contiguous), 33875/1048576 blocks
[[email protected] ~]# resize2fs /dev/myvg/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 786432 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 786432 blocks long.

[[email protected] ~]# lvreduce -L 3G /dev/myvg/mylv 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents).
  Logical volume mylv successfully resized
[[email protected] ~]# mount /dev/myvg/mylv /data
[[email protected] ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             108G  1.3G  101G   2% /
tmpfs                  84M     0   84M   0% /dev/shm
/dev/sda1             190M   25M  156M  14% /boot
/dev/sda2             9.5G   22M  9.0G   1% /home
/dev/mapper/myvg-mylv
                      2.9G  3.1M  2.8G   1% /data
[[email protected] ~]# cd /data
[[email protected] data]# ls
lost+found  rc.sysinit

快照卷:

一般只能读

lvcreate:

    -L:size

    -n:name

    -s:

    -p:r

快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一卷组中,所以无须指明卷组

注意:确保创建时,原卷没有修改

[[email protected] data]# mount -o remount,ro /dev/myvg/mylv /data
[[email protected] data]# lvcreate -L 512M -n mylv-snap -p r -s /dev/myvg/mylv 
 Logical volume "mylv-snap" created
[[email protected] data]# mount -o remount,rw /dev/myvg/mylv /data
[[email protected] data]# mkdir /snap
[[email protected] data]# mount /dev/myvg/mylv-snap /snap
mount: block device /dev/mapper/myvg-mylv--snap is write-protected, mounting read-only

修改原卷:

[[email protected] data]# vim rc.sysinit 
[[email protected] data]# tail -5 rc.sysinit
if [ -x /bin/plymouth ]; then
    /bin/plymouth --sysinit
fi

new line

快照卷:

[[email protected] data]# cd /snap
[[email protected] snap]# ls
lost+found  rc.sysinit
[[email protected] snap]# tail -5 rc.sysinit 
# Let rhgb know that we‘re leaving rc.sysinit
if [ -x /bin/plymouth ]; then
    /bin/plymouth --sysinit
fi

复制文件到原卷并查看:

[[email protected] data]# cp /etc/fstab /data
[[email protected] data]# ls
fstab  lost+found  rc.sysinit

查看快照卷:

[[email protected] snap]# ls
lost+found  rc.sysinit

移除快照卷、lv、vg、pv:

[[email protected] snap]# cd
[[email protected] ~]# umount /snap
[[email protected] ~]# lvremove /dev/myvg/mylv-snap 
Do you really want to remove active logical volume mylv-snap? [y/n]: y
  Logical volume "mylv-snap" successfully removed
[[email protected] ~]# umount /data
[[email protected] ~]# lvremove myvg
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed
[[email protected] ~]# vgremove myvg
  Volume group "myvg" successfully removed
[[email protected] ~]# pvremove /dev/sdb{1,2}
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdb2" successfully wiped

做快照卷备份时,即把快照卷内的数据和原卷中的数据一起备份,然后再卸载、移除快照卷,卸载原卷并格式化它,重新挂载原卷,并还原备份。


本文出自 “行者” 博客,请务必保留此出处http://223228686.blog.51cto.com/2222284/1883658

以上是关于本人linux小菜,现遇到要在linux下对磁盘进行热插拔的问题,求高人指教!!!的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统逻辑卷管理

linux第二十二LVM

LVM逻辑卷

ubuntu里的LVM是啥意思

Linux自学笔记——LVM2的创建与管理

linux下对LVM扩容