构造Linux的图形化安装程序(3)[3]

[入库:2005年9月19日] [更新:2007年3月25日]

本文简介:

  LVM(Logical Volume Management)是逻辑卷管理的缩写。它的出现将物理磁盘分割成一些逻辑单位,来自于不同磁盘的分区能组成一个逻辑卷。此外,在需要时分区能被动态的加入和删除。举例来说,如果你有一个8GB的磁盘,其上有一个2GB的分区/usr,它的空间已经耗尽了。如果您要扩大/usr分区的话,必须首先创建一个更大的分区,然后将/usr的所有内容都拷贝到此分区中,改变/etc/fstab文件,重新启动。但是如果在系统中使用了LVM的话,你只需使用LVM中的命令,就可以简单的增大/usr。
  
  LVM的分区方式对于需要大数据量存储的分区进行管理,可以极大的减轻管理员的负担。而且,在LVM和RAID设备结合使用之后,可以构造出一种灵活而且高效的存储方案。
  
  4.1 LVM的基本概念
  后面在建立LVM类型的分区时,会用到一些术语,下面先对这些术语进行介绍。
  
  物理卷(PV)
  物理卷仅仅是进行了LVM初始化的物理分区,以使得LVM管理程序能识别这个分区。
  物理范围(PE)
  物理范围是一些大数据块,通常有几兆字节。
  卷组(VG)
  一个VG可由多个PE组成。一个VG可由几个分区组成,它包含的PE由这些分区提供。在某种意义上说,我们可以认为VG就是一个硬盘设备。
  逻辑卷(LV)
  逻辑卷是最终用户访问的部分,它用于存储数据。在某种意义上说,我们可以认为LV就是一个逻辑分区。其上可以创建任何类型的分区,包括EXT2,ReiserFS,NTFS等等。在访问时,它和正常的磁盘分区一样。
  逻辑范围(LE)
  每个逻辑卷被分割成为数据块。
  为了使LVM在系统中能够正常工作,那么在定制内核的时候,要将LVM支持作为模块形式定制。然后,为了创建和管理LVM逻辑分区,您还需要安装LVM包。
  
  步骤如下:
  使用fdisk命令设置分区/dev/hda3和/dev/hdc3类型为0x8e。
  创建物理卷。
  pvcreate /dev/hda3
  pvcreate /dev/hdc3
  
  创建新卷组newvg,它包含/dev/hda3和/dev/hdc3分区,卷组的大小是两个分区容量的总和。在成功创建此卷组之后会在/dev目录下形成目录/dev/newvg,在其后生成的逻辑卷设备文件都保存在此目录下。
  vgcreate newvg /dev/hda3
  vgcreate newvg /dev/hdc3
  
  创建新的逻辑卷
  lvcreate -L1500 -nnewlv newvg
  创建一个1500MB线性逻辑卷,同时这条命令也创建逻辑卷对应的块设备文件/dev/newvg/newlv。
  lvcreate -i2 -I4 -l1500 -notherlv newvg
  以交错块(stripe)为2,块大小为4 KB创建另一个逻辑卷,对应的设备别名是/dev/newvg/otherlv。
  
  创建文件系统
  mke2fs /dev/newvg/newlv
  在设备/dev/newvg/newlv上创建ext2文件系统,除了ext2文件系统之外,您还可以创建Reiserfs等多种文件系统
  
  激活lvm逻辑卷
  vgchange -a y
  在使用卷组之前,控制卷组对内核的可见性。这条命令激活系统中所有已知的卷组。在删除一个卷组之前,最好先使用vgchange -a n禁用卷组。
  
  读入LVM分区信息 sub get_lvs {
  my ($lvm) = @_;
  my @fstabs;
  my $start = 0;
    
  @fstabs = ();
  $lvm->{primary}{normal} = ();
  undef $lvm->{primary}{normal};
  #- 使用vgdisplay -v -D lvmname获得所有卷组。
  foreach (map { /^LV Name\s+(\S+)/ ? $1 : () } `vgdisplay -v -D $lvm->{LVMname}`) {
      #- 使用lvdisplay -D -c lv获得逻辑卷的信息。
      my @lvinfo = split(':', `lvdisplay -D -c $_`);
      my $size = $lvinfo[6];
      my $type = -e $_ && fsedit::typeOfPart($_);
      my %fstab;
      $fstab{device} = $_;
      $fstab{type} = $type || 0x83;
      $fstab{size} = $size;
      $fstab{isFormatted} = $type;
      $fstab{number} = $lvinfo[4];
      $fstab{start} = $start;
      $fstab{lvm} = $_;
      $start += $size;
      push @fstabs, \%fstab;
  }
  $lvm->{primary}{normal} = \@fstabs;
  }
  
  
  
  
  
  将LVM分区操作写入磁盘 #- 对已经删除的lvm分区,则除去其上的逻辑卷,然后将其除去。
  #- 若只有部分逻辑卷被除去,则删除这部分逻辑卷
  foreach my $lv (@{$o->{lvms}}) {
    if ($lv->{isRemove}) {
      #- 除去所有的逻辑卷
      foreach (fsedit::get_fstab($lv)) {
      lvm::lv_delete($_);
      }
      #- 清空主分区描述结构
      splice @{$lv->{primary}{normal}}, 0;
      #- 清除卷组
      lvm::vg_destroy($lv);
    } else {
      foreach (fsedit::get_fstab($lv)) {
      lvm::lv_delete($_) if ($_->{isRemove});
      }
    } 
  }
    
  foreach my $lv (@lvm) {
  #- 对现在存在的lvm分区,如果是新创建的,则创建新的卷组
  #- 否则,找出新添加的卷组,并将其加入已存在的卷组中
    if ($lv->{isCreate}) {
      lvm::vg_add($_) foreach (@{$lv->{disks}});
    } else {
      lvm::vg_add($_) foreach (grep { $_->{isNewPV} } @{$lv->{disks}});
    }
    #- 对于卷组上存在的逻辑卷,如果是新创建的,则调用lv_create创建。

本文关键:构造Linux的图形化安装程序(3)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top