当前位置:Linux教程 - Linux - 用 Sfdisk 和 Perl 对硬盘分区

用 Sfdisk 和 Perl 对硬盘分区



        
    作者:Mark Nielsen译者:小牟


    索引:
    资源。
    Sfdisk 和 Perl Expect 模式介绍。
    如何用Sfdisk获得硬盘信息。
    如何用Sfdisk对硬盘创建或者重新分区。
    如何用Expect删除所有分区。
    如何用Expect更改分区信息。
    注释。
    今后变更的相关内容会位于 http://www.tcu-inc.com/mark/articles/Sfdisk.html


    --------------------------------------------------------------------------------

    资源
    http://www.perl.com/CPAN/authors/id/AUSCHUTZ/Expect.pm-1.07.tar.gz
    /usr/src/linux/Documentation/ide.txt
    man sfdisk
    man lilo
    man lilo.conf
    http://metalab.unc.edu/LDP/HOWTO/mini/LILO.html
    man hdparm #捎带说明 -- 可能你会发现这对其他很多事情都非常有用。

    --------------------------------------------------------------------------------

    Sfdisk Perl Expect模式介绍
    我真是对自己的表现非常激动。我只在Redhat 6.0中进行了重复测试。Debian 会是很好的替代。
    此文章的目的是介绍如何使用 Sfdisk 和 Perl Expect 模式来自动处理硬盘分区。为什么要这么做?其实这是众多解决 Linux 的启动文件必须放在1024柱面之前的问题的方法之一,还有其他许多办法,但这篇文章中是靠改变柱面来进行的。也可用来对新硬盘进行自动分区。

    .Sfdisk是一个通过 scripts 来变更硬盘分区的工具,也能让你获取硬盘的信息。虽然很酷,但是确有力有不逮之处。其能完成fdisk的多数必要的能力,但决不是所有的功能。

    Disk Druid 是 Redhat 中用来在硬盘安装 Linux 之前进行初始化的程序。(更改分区大小)

    Perl是酷毙了的编程语言。其\"Expect\"模式是加入相关的对用户友好方式使得可以自动操作命令。换而言之,就是说当运行 Expect 模式的描述语言程序时,它就如同你自己在计算机的键盘上输入命令 -- 对任何基于控制台运行的程序而言更象宏但更高级更有用。Perl 就是如此的酷,它可以使用任何的东西。

    要运行 Expect Perl 模式就必须要安装两个模块。
    IO-Stty-.02.tar.gz
    IO-Tty-0.02.tar.gz


    --------------------------------------------------------------------------------

    如何用Sfdisk获取硬盘信息。
    在 RedHat 6.0中,缺省就包含了sfdisk。 我猜可能BSD的规则中是要节省空间的。不管怎样,下面就是一些获得 PC兼容机中硬盘主控制器参数的命令。
    硬盘分区信息,

    /sbin/sfdisk -g /dev/hdd

    以字节为单位显示硬盘的总空间大小,
    /sbin/sfdisk -s /dev/hdd

    将第一硬盘5分区的 id 号设为 Linux 分区,
    sfdisk --change-id /dev/hdd 5 83


    --------------------------------------------------------------------------------

    用Sfdisk创建或重新对硬盘分区。
    Sfdisk 的强大特性是对硬盘重新分区或创建新分区。以如下格式建立一个\"Test.data\"的文件,字段之间以逗号分隔:
    起始,大小,ID,可启动

    起始 = 起始柱面(如果不进行指定则为第一可用柱面),大小 = 柱面数量(如果不进行指定则指所有柱面),ID号 = 分区类型(Linux, Swap, MSDOS, 或其他),可启动=分区是否设为启动分区。还有其他的一些选项,但在此不做讨论。

    假设要设立第一分区为136柱面, 第二分区为254柱面的SWAP分区(ID=82),第三分区为剩下的所有空间设为Linux分区(ID=83),则文件如下设置:

     

    1,136
    101,254,82
    201,,83,*

    然后执行如下命令将在从硬盘或第二硬盘上进行设置

    /sbin/sfdisk /dev/hdd << Test.data

    查看是否已经设置
    /sbin/sfdisk /dev/hdd

    再次重申,推荐去读manpage来了解在文件中如何设置这些参数。以上任何未设定的字段将按默认值进行设定。

    *译注:对硬盘分区进行设置是很危险的,特别是存有数据的盘,很可能导致数据丢失,所以一定要仔细检查是对哪个硬盘进行设置,否则任何的误操作将导致无谓的牺牲。


    --------------------------------------------------------------------------------

    如何利用 Expect 来删除硬盘的所有分区。
    用 Perl script 来删除所有分区是非常危险的,如果在你的硬盘上进行测试,我不担保任何错误,即使我的这个文件是错误的,这就是你要去冒的风险。
    根本而言,以 Expect 模式,可以自动执行任何命令,你以后可能会写一个复杂的程序 -- 而这里只是一个提示。

    将文件存为 \"Dufus_Move.pl\" 并执行以下命令

    chmod 755 Dufus_Move.pl
    然后如下在你的从硬盘或第二控制器上执行,

    ./Dufus_Move.pl d

    --------------------------------------------------------------------------------

    用Expect来改变硬盘分区信息。
    用 Perl script 来改变分区设置是非常危险的,如果你在自己的硬盘上进行测试,我不担保任何错误,即使我的这个文件是错误的,这就是你要去冒的风险。
    无论如何,这个 script 将分区的柱面值设为最大

    将文件存为 \"Change_Cylinders.pl\" 并执行以下命令

    chmod 755 Change_Cylinders.pl
    然后如下在你的从硬盘或第二控制器上执行,
    ./Change_Cylinders.pl d

    --------------------------------------------------------------------------------

    Comments注释
    Sfdisk 真是一个很酷的程序,但创建一个Fdisk的perl界面就酷呆了。但“他们”为什么不更酷一下,我也不知道他们应该是指谁。
    如果Sfdisk能够重做一个硬盘,我就不再需要其他的任何工具了。也许完全能行的通,但我还没见过。
    这是我第一次真正用Expect做复杂的任务,在此没有列出所有我曾做的东西。

    --------------------------------------------------------------------------------

    Mark Nielsen 的工作是在 The Computer Underground 做数据库编程助理,兼职做ZING的制订工还在 linux.com 跑跑龙套。以上文字使用Nedit和ispell编辑。

    *译注:对硬盘分区进行设置是很危险的,特别是存有数据的盘,很可能导致数据丢失,所以一定要仔细检查是对哪个硬盘进行设置,否则任何的误操作将导致无谓的牺牲。以上的所有内容小牟未进行过测试
    发布人:netbull 来自:Linux公报