HOME 生活记录运维/编程
作者/来源:yixinu.com
栏目:运维/编程
日期:2012-06-17 13:23:09

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

分享到:

Copyright © 2013-2014 yixinu.com 湘ICP备14004402号

QQ:316686606  Email: 316686606@qq.com