blockdev 命令:
--getsz 以512个字节为一个单元来获取一个扇区的大小
--getsize 以一个32比特 bit 的数值为单元来获取
dmsetup 命令:
低级别的逻辑卷管理
create 创建设备
targets 查看当前系统支持的类型
table 查看当前逻辑卷分配表
remove
remove_all
--------------------------
example 1 : 使用一个物理磁盘创建线性卷(linear)
创建一个mydev的设备
[root@host1 ~]# echo "0 `blockdev --getsz /dev/sdb5` linear /dev/sdb5 0" | dmsetup create mydev
查看设备
[root@host1 ~]# ls /dev/mapper/mydev -al lrwxrwxrwx. 1 root root 7 Jun 18 02:51 /dev/mapper/mydev -> ../dm-2 [root@host1 ~]# ls /dev/dm* -al brw-rw----. 1 root disk 253, 0 Jun 18 02:40 /dev/dm-0 brw-rw----. 1 root disk 253, 1 Jun 18 02:40 /dev/dm-1 brw-rw----. 1 root disk 253, 2 Jun 18 02:51 /dev/dm-2
example 2 : 使用两个物理磁盘创建线性卷(linear)
磁盘分区情况
[root@host1 ~]# fdisk /dev/sdb -l Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 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: 0xb78f84d4 Device Boot Start End Blocks Id System /dev/sdb1 1 1305 10482381 5 Extended /dev/sdb5 1 654 5253192 83 Linux /dev/sdb6 655 916 2104483+ 83 Linux
编辑一个文件
注意:因为是两个磁盘组成一个逻辑卷,所以第二个磁盘的起始值不是0,而是用第一个磁盘磁道的长度作为起始值,所以下而第二行第一个值 和第一行第二个值 是一样的
[root@host1 ~]# cat table.txt 0 10506384 linear /dev/sdb5 0 10506384 4208967 linear /dev/sdb6 0
创建设备
[root@host1 ~]# dmsetup create mydev ./table.txt
已经创建成功
[root@host1 ~]# dmsetup table VolGroup-lv_swap: 0 2097152 linear 8:2 38815744 VolGroup-lv_root: 0 38813696 linear 8:2 2048 mydev: 0 10506384 linear 8:21 0 mydev: 10506384 4208967 linear 8:22 0
挂载并查看文件,文件都还在,磁盘没有被破坏
[root@host1 ~]# mount /dev/mapper/mydev /mnt/temp [root@host1 ~]# ls /mnt/temp
查看分区大小,resize2fs 之前大小没有变化
[root@host1 ~]# df /mnt/temp -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/mydev 5.0G 139M 4.6G 3% /mnt/temp
resize2fs 之后
[root@host1 ~]# resize2fs /mnt/temp
这是两磁盘的大小总和
[root@host1 ~]# df /mnt/temp -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/mydev 7.0G 140M 6.5G 3% /mnt/temp
example 3 : 用两个物理磁盘创建条带卷(striped) ,chunk_size 为128 ,创建 每个设备 64KB一个单元,所以 *2 就是 128
两个同样大小的磁盘
[root@host1 ~]# blockdev --getsize /dev/sd{b,c} 2097152 2097152
创建:echo "起始值 `blockdev --getsize /dev/sd?`*磁盘数量 striped 磁盘数量 chunk_size 磁盘1 0 磁盘2 0 ... " | dmsetup create 逻辑卷名称
[root@host1 ~]# echo "0 4194304 striped 2 128 /dev/sdb 0 /dev/sdc 0" | dmsetup create mydev [root@host1 ~]# dmsetup table VolGroup-lv_swap: 0 2097152 linear 8:2 38815744 VolGroup-lv_root: 0 38813696 linear 8:2 2048 mydev: 0 4194304 striped 2 128 8:16 0 8:32 0
注意:上面 第二个参数 blockdev 获取的值必须能带队 128 ,也就是求模为 0 ,这条命令才会执行成功,如果 求模 不能为0 则,这个值 减去求模后的值再运行这条命令才以能成功,否则会出现下面这样的错误
[root@host1 ~]# echo "0 4194301 striped 2 128 /dev/sdb 0 /dev/sdc 0" | dmsetup create mydev device-mapper: reload ioctl failed: Invalid argument Command failed直接提示: 参数无效
解释 :因为条带卷是一组数据同时向物理磁盘写,如果上面设置的磁盘长度不能被128整除,也就是如果有一组数据过来,以64KB为一块分别向两个磁盘写时,磁道无法满足这组数据的要求,不能写操作,所以上面的 2097151也就成了个无效的参数。。
两个磁道为1KB ,每个磁道为512字节。。
[root@host1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 19G 1.9G 16G 11% / ………… /dev/mapper/mydev 2.0G 34M 1.9G 2% /mnt/temp