Oracle ASM存储技术日益成熟和流行,ASM提供了逻辑卷管理、软RAID服务、支持条带化和磁盘镜像,从而在保护磁盘数据的基础上实现了添加或移除磁盘以及自动平衡I/O以删除热点的功能。
然而,要深刻理解ASM技术就必须先理解操作系统级别的磁盘管理技术。在工作和实践过程中,我熟悉了AIX的LVM管理,HP-UNIX的逻辑卷管理技术与AIX类似,其实linux也是从PV到VG到LV再到
裸设备或者文件系统的存储层次化管理,只是在平时可能用到的想对较少。以下在我虚拟机下的linux 5.4下介绍Linux的分区及逻辑卷管理技术。
Linux系统下一块磁盘支持1-4个主分区和扩展分区,扩展分区下面可以建多个逻辑分区,但是主分区和扩展分区之和小于等于4个。fdisk是linux的分区管理工具。
如下所示,我没有以LVM的方式安装操作系统,而是简易安装,fdisk -l查看包括以下三个分区:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 38 305203+ 83 Linux
/dev/sda2 39 2349 18563107+ 83 Linux
/dev/sda3 2350 2610 2096482+ 82 Linux swap / Solaris
[root@localhost ~]# 
3个都是主分区类型,sda表明磁盘是SCSI磁盘,其中sda3是swap分区。上面有个Id的列,在linux下每个分区都有一个识别码(Id),也称为分区类型,创建分区时必须设置正确的分区类型。
83是包含linux文件系统的分区的正确类型,82是linux swap分区的正确类型,8e为Linux LVM分区类型,系统中目前没有LVM的类型分区。
下面我在系统中加入一块sdb的磁盘,在sdb磁盘下创建逻辑卷和文件系统。如下所示,目前系统中有sda和sdb两块磁盘,Disk /dev/sdb doesn't contain a valid partition table表明sdb目前没有进行任何分区:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 38 305203+ 83 Linux
/dev/sda2 39 2349 18563107+ 83 Linux
/dev/sda3 2350 2610 2096482+ 82 Linux swap / Solaris
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
[root@localhost ~]# 

通过fdisk /dev/sdb命令创建两个主分区/dev/sdb1和/dev/sdb2,在创建过程中通过 t change a partition's system id选项设置分区类型为8e,即LVM类型:
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. 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)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): 200
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
....


在创建完成之后,查看分区情况如下:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 38 305203+ 83 Linux
/dev/sda2 39 2349 18563107+ 83 Linux
/dev/sda3 2350 2610 2096482+ 82 Linux swap / Solaris
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 200 1606468+ 8e Linux LVM
/dev/sdb2 201 500 2409750 8e Linux LVM
[root@localhost ~]# 
上面的652 cylinders表明sdb磁盘有652个扇区,目前已经分配了500个。
创建PV:
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created
[root@localhost ~]# pvdisplay
"/dev/sdb1" is a new physical volume of "1.53 GB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name 
PV Size 1.53 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 6LoD3D-93nO-BwfY-tvHT-y08F-42mq-kYbrOt

"/dev/sdb2" is a new physical volume of "2.30 GB"
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name 
PV Size 2.30 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 0bmrBM-k2xO-DfM0-DnTr-ijr0-Ud6D-GUoklJ
pvdisplay命令类似于AIX下的lspv。
创建VG,这里我们将上面两个PV放在同一个VG里:
[root@localhost ~]# vgcreate myvg01 /dev/sdb1 /dev/sdb2
/dev/cdrom: open failed: Read-only file system
/dev/cdrom: open failed: Read-only file system
Attempt to close device '/dev/cdrom' which is not open.
Volume group "myvg01" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name myvg01
System ID 
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 3.83 GB
PE Size 4.00 MB
Total PE 980
Alloc PE / Size 0 / 0 
Free PE / Size 980 / 3.83 GB
VG UUID 1DD9e3-x6ue-N5mD-PvaH-XSQd-C4qW-O8Wz0B

[root@localhost ~]# 
创建3个lv,myvg01即上面vg的name,在创建200M的lv时,敲错了vg名:
[root@localhost ~]# lvcreate -L 100M -n lv01 myvg01
Logical volume "lv01" created
[root@localhost ~]# lvcreate -L 200M -n lv02 myvg02
/dev/cdrom: open failed: Read-only file system
Attempt to close device '/dev/cdrom' which is not open.
Volume group "myvg02" not found
[root@localhost ~]# lvcreate -L 200M -n lv02 myvg01
Logical volume "lv02" created
[root@localhost ~]# lvcreate -L 300M -n lv03 myvg01
Logical volume "lv03" created
[root@localhost ~]# 
lvdisplay类似于AIX的lslv命令,将列出系统中的所有lv信息.
以上已经建立了大小分别为100M、200M、300M的三个逻辑卷,这样的逻辑卷可以作为裸设备来挂oracle的数据文件等支持裸设备的文件类型,也可以在lv上面
创建文件系统。建裸设备数据库的这里不做介绍,下面我们将lv03的逻辑卷创建文件系统,并且mount到/lvfs01目录下:
[root@localhost ~]# mkfs -t ext3 /dev/myvg01/lv03
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
76912 inodes, 307200 blocks
15360 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
38 block groups
8192 blocks per group, 8192 fragments per group
2024 inodes per group
Superblock backups stored on blocks: 
8193, 24577, 40961, 57345, 73729, 204801, 221185
Writing inode tables: done 
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# 
创建挂接目录/lvfs01,并挂接lv03:
[root@localhost ~]# mkdir /lvfs01
[root@localhost ~]# mount /dev/myvg01/lv03 /lvfs01
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.2G 15G 13% /
/dev/sda1 289M 16M 259M 6% /boot
tmpfs 506M 0 506M 0% /dev/shm
/dev/hdc 5.9M 5.9M 0 100% /media/我的光盘
/dev/mapper/myvg01-lv03
291M 11M 266M 4% /lvfs01
[root@localhost ~]# 
至此,已经在LV03上面成功创建了文件系统。如果要将新创建的文件开机自动挂载,则需要将其写入到/etc/fstab文件中。