编程世界 - 计算机爱好者和编程爱好者的天堂!

编程世界

当前位置: 主页 > LINUX > 入门 > Linux安装 >

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

时间:2008-11-29 15:05来源:编程世界 作者:无名 点击:
读入分区表 #- 以下代码读入整个硬盘分区表形成分区的描述结构。 sub read($;$) { my ($hd, $clearall) = @_; if ($clearall) { partition_table_raw::zero_MBR_and_dirty($hd); return

  
  读入分区表 #- 以下代码读入整个硬盘分区表形成分区的描述结构。
  
  sub read($;$) {
  my ($hd, $clearall) = @_;
  if ($clearall) {
  partition_table_raw::zero_MBR_and_dirty($hd);
    return 1;
  }
  #- 读入主分区表,检测这分区表上扩展分区数,如大于1,则出错。
  my $pt = read_one($hd, 0) or return 0;
  #- 主分区描述数组存入primary变量中。
  $hd->{primary} = $pt;
  undef $hd->{extended};
  #- 校验主分区,校验包括:分区是否重叠,是否存在未知空洞。
  verifyPrimary($pt);
  #- 如果存在扩展分区,则读入扩展分区,这时要检测扩展分区是否重叠,是否存在循环联结。
  eval {
    $pt->{extended} and read_extended($hd, $pt->{extended}) || return 0;
  };
  #- 对读出的分区指定其设备号,主分区/dev/hda1(/dev/sda1)到/dev/hda4(/dev/sda4)。
  assign_device_numbers($hd);
  #- 除去扩展分区中的空连接。
  remove_empty_extended($hd);
  1;
  }
  
  
  
  
  
  将分区操作写入分区表 #- 此操作只是根据用户的操作写分区表,包括写入分区大小分区类型等信息。
  sub write($) {
  my ($hd) = @_;
  $hd->{isDirty} or return;
  #- 设置引导标志
  for ($hd->{primary}{raw}) {
  (grep { $_->{local_start} = $_->{start}; $_->{active} ||= 0 } @$_) or $_->[0]{active} = 0x80;
  }
  #- 校验分区,校验包括:分区是否重叠,是否存在未知空洞。
  verifyParts($hd);
  #- 写入分区表
  $hd->write(0, $hd->{primary}{raw}, $hd->{primary}{info}) or die "writing of partition table failed";
  
  $hd->{isDirty} = 0;
  $hd->{hasBeenDirty} = 1;
  if ($hd->{needKernelReread}) {
  sync();
    $hd->kernel_read;
    $hd->{needKernelReread} = 0;
  }
  }
  
  
  
  
  
  3 创建文件系统
  在分区操作结束之后,为了在其上进行安装,还需要在分区上创建文件系统。安装程序是使用系统命令,比如mkdosfs,mke2fs,mkreiserfs来创建文件系统。
  
  sub format_ext2($@) {
  my ($dev, @options) = @_;
  
  $dev =~ m,(rd|ida|cciss)/, and push @options, qw(-b 4096 -R stride=16);
  push @options, qw(-b 1024 -O none) if arch() =~ /alpha/;
  #- 调用mke2fs创建ext2文件系统
  run_program::run("mke2fs", @options, devices::make($dev)) or die _("%s formatting of %s failed", "ext2", $dev);
  }
  
  sub format_dos($@) {
  my ($dev, @options) = @_;
    #- 调用mkdosfs创建fat文件系统
  run_program::run("mkdosfs", @options, devices::make($dev)) or die _("%s formatting of %s failed", "dos", $dev);
  }
  
  
  
  
  
  创建Reiserfs文件系统
  
  sub format_reiserfs($@) {
  my ($dev, @options) = @_;
  #- 调用mkreiserfs创建Reiserfs文件系统
  run_program::run("mkreiserfs", "-f", @options, devices::make($dev)) or die _("%s formatting of %s failed", "reiserfs", $dev);
  }
  
  
  
  
  
   在使用Reiserfs文件系统作为系统的根分区时,系统在启动的过程中需要加载模块reiserfs.o。RedHat 7.0以下的版本则不支持Reiserfs文件系统,所以很多基于RedHat的发行版本也不支持Reiserfs文件系统。如果您要在这样的系统上加入 reiserfs支持,除了装载Reiserfs对应的rpm包之外,还要在生成初始启动镜像(initrd)时,在linuxrc中加载Reiserfs模块。
  
  这需要在/sbin/mkinitrd文件中加入下列语句:
  
  # 对于/etc/fstab中挂接的文件系统,如果它的类型不是ext2,那么必须加载设备模块。
  
  fs=$(awk '$2 == "/" {print $3 }' /etc/fstab)
  
  [ -n "$fs" -a "$fs" != "ext2" ] && findmodule $fs
  
  4 支持LVM类型的分区
  一般而言,磁盘分区的大小是固定的,它要求用户在安装系统时对分区空间的使用有大概的了解。在用户用尽了分区上所有的空间时,则要求重新分区或者移走一部分文件。
  
   LVM(Logical Volume Management)是逻辑卷管理的缩写。它的出现将物理磁盘分割成一些逻辑单位,来自于不同磁盘的分区能组成一个逻辑卷。此外,在需要时分区能被动态 的加入和删除。举例来说,如果你有一个8GB的磁盘,其上有一个2GB的分区/usr,它的空间已经耗尽了。如果您要扩大/usr分区的话,必须首先创建 一个更大的分区,然后将/usr的所有内容都拷贝到此分区中,改变/etc/fstab文件,重新启动。但是如果在系统中使用了LVM的话,你只需使用 LVM中的命令,就可以简单的增大/usr。 (责任编辑:编程世界)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
栏目列表
推荐内容