成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關(guān)注微信公眾號(hào)

構(gòu)造Linux的圖形化安裝程序(3)
2009-05-22   

本文從基本的分區(qū)表結(jié)構(gòu)開始,介紹分區(qū)功能的實(shí)現(xiàn)和如何支持RAID、LVM這些高級(jí)功能。
分區(qū)功能對(duì)于Linux圖形化安裝程序來(lái)說,是一個(gè)非常重要的功能。它的基本功能是自動(dòng)識(shí)別硬盤,并在硬盤上創(chuàng)建ext2類型的分區(qū)和交換分區(qū)。用戶將此分區(qū)作為根分區(qū),在其上進(jìn)行Linux系統(tǒng)的安裝。
對(duì)于一個(gè)功能較全的安裝程序,它還應(yīng)該具備創(chuàng)建其他類型的分區(qū)的能力,包括reiserfs、fat等等,創(chuàng)建軟件RAID分區(qū),創(chuàng)建邏輯卷管理分區(qū)的能力。以及具有過濾合法安裝點(diǎn),根據(jù)選擇的分區(qū)類型決定最合適掛接點(diǎn)的能力。分區(qū)能夠動(dòng)態(tài)的刪除和修改,分區(qū)操作能夠恢復(fù)到分區(qū)操作之前具體內(nèi)容的狀態(tài)。
這個(gè)部分介紹的主要內(nèi)容包括代碼都是基于HappyLinux的安裝程序,所有功能全部在HappyLinux3.0的安裝程序中實(shí)現(xiàn)。您可以在安裝盤的/HappyLinux/happyinst/usr/bin/perl-install目錄下獲得安裝程序源碼。
1 安裝程序分區(qū)模塊介紹
在圖形化安裝程序中,硬盤分區(qū)的一般流程是:
 
裝程序中與分區(qū)功能密切相關(guān)的模塊包括:
diskdrake.pm
圖形化的分區(qū)處理模塊,它是分區(qū)功能的主控模塊,處理與用戶的交互,進(jìn)行分區(qū)操作的合法性檢查。
diskdrake.rc
分區(qū)操作窗口的資源文件,主要描述不同分區(qū)類型的表述。
fs.pm
完成掛接和格式化分區(qū)的操作,同時(shí)也生成/etc/fstab文件。
fsedit.pm
獲得硬盤分區(qū)結(jié)構(gòu),完成添加、刪除、修改分區(qū)的操作。
lvm.pm
提供創(chuàng)建、修改和獲取邏輯卷管理分區(qū)的模塊。
partition_table.pm
對(duì)分區(qū)表操作的邏輯副本進(jìn)行操作的模塊,包括分區(qū)操作的合法性判斷、設(shè)置分區(qū)對(duì)齊、讀取主分區(qū)和擴(kuò)展分區(qū)、類型判斷的函數(shù)。
partition_table_dos.pm
對(duì)dos類型的分區(qū)表進(jìn)行操作的模塊。
partition_table_raw.pm
直接存取硬盤分區(qū)表讀取/寫入分區(qū)信息。
raid.pm
對(duì)軟件raid設(shè)備進(jìn)行處理的模塊。
2 基本分區(qū)功能
硬盤主分區(qū)由240字節(jié)的硬盤主引導(dǎo)記錄(0000H-00EFH),64字節(jié)的硬盤分區(qū)表(01BEH-01FDH)以及最后兩個(gè)字節(jié)的自舉記錄有效標(biāo)志等三部分組成。主引導(dǎo)記錄塊的布局:
硬盤0柱面0磁頭1扇區(qū)
主引導(dǎo)記錄代碼區(qū)
第一個(gè)分區(qū)表
第二個(gè)分區(qū)表
第三個(gè)分區(qū)表
第四個(gè)分區(qū)表
主引導(dǎo)記錄有效標(biāo)志55H,AAH
表 1-1
硬盤分區(qū)各個(gè)字段的意義是:
字節(jié)位移 長(zhǎng)度(字節(jié)) 字段含義
0 1 活動(dòng)分區(qū)指示符。該值為80H,表示可自舉分區(qū)(僅有一個(gè));改值為00H,表示不可自舉分區(qū)。該字節(jié)也稱為自舉標(biāo)志。
1 1 起始磁頭號(hào)
2 1 起始扇區(qū)號(hào)(低6位)和起始柱面號(hào)的高2位
3 1 起始柱面號(hào)的低8位
4 1 分區(qū)上的系統(tǒng)標(biāo)志。
該值為01H,表示采用12位FAT格式的DOS分區(qū)。
該值為04H,表示采用16位FAT格式的DOS分區(qū)。
該值為07H,表示采用NTFS分區(qū)。
該值為0BH,表示采用WIN98的FAT32格式的分區(qū)。
該值為0CH,表示采用WIN98的FAT32格式的分區(qū),支持LBA方式。
該值為0FH,表示采用WIN95的擴(kuò)展分區(qū),支持LBA方式。
該值為82H,表示采用LINUX SWAP格式的分區(qū)。
該值為83H,表示采用LINUX EXT2格式的分區(qū)。
該值為8EH,表示采用LVM格式的分區(qū)。
該值為FDH,表示采用軟件RAID格式的分區(qū)。
5 1 結(jié)束磁頭號(hào)
6 1 結(jié)束扇區(qū)號(hào)(低6位)和結(jié)束柱面號(hào)的高2位
7 1 結(jié)束柱面號(hào)的低8位
8 4 相對(duì)扇區(qū)號(hào)
12 4 該分區(qū)所用的扇區(qū)號(hào)
表 1-2
硬盤分區(qū)是以鏈接表的形式存在的,在每個(gè)硬盤上都存在一個(gè)主分區(qū)描述塊,它可以描述四個(gè)分區(qū),每個(gè)硬盤最多只存在四個(gè)主分區(qū),其他的分區(qū)則為擴(kuò)展分區(qū)。每個(gè)擴(kuò)展分區(qū)是通過鏈接字段聯(lián)結(jié)在一起。

主分區(qū)使用的設(shè)備別名是從/dev/hda1到/dev/hda4,其后從/dev/hda5開始的分區(qū),都代表擴(kuò)展分區(qū)。
讀入分區(qū)表 #- 以下代碼讀入整個(gè)硬盤分區(qū)表形成分區(qū)的描述結(jié)構(gòu)。
sub read($;$) {
my ($hd, $clearall) = @_;
if ($clearall) {
partition_table_raw::zero_MBR_and_dirty($hd);
return 1;
}
#- 讀入主分區(qū)表,檢測(cè)這分區(qū)表上擴(kuò)展分區(qū)數(shù),如大于1,則出錯(cuò)。
my $pt = read_one($hd, 0) or return 0;
#- 主分區(qū)描述數(shù)組存入primary變量中。
$hd->{primary} = $pt;
undef $hd->{extended};
#- 校驗(yàn)主分區(qū),校驗(yàn)包括:分區(qū)是否重疊,是否存在未知空洞。
verifyPrimary($pt);
#- 如果存在擴(kuò)展分區(qū),則讀入擴(kuò)展分區(qū),這時(shí)要檢測(cè)擴(kuò)展分區(qū)是否重疊,是否存在循環(huán)聯(lián)結(jié)。
eval {
$pt->{extended} and read_extended($hd, $pt->{extended}) "| return 0;
};
#- 對(duì)讀出的分區(qū)指定其設(shè)備號(hào),主分區(qū)/dev/hda1(/dev/sda1)到/dev/hda4(/dev/sda4)。
assign_device_numbers($hd);
#- 除去擴(kuò)展分區(qū)中的空連接。
remove_empty_extended($hd);
1;
}
將分區(qū)操作寫入分區(qū)表 #- 此操作只是根據(jù)用戶的操作寫分區(qū)表,包括寫入分區(qū)大小分區(qū)類型等信息。
sub write($) {
my ($hd) = @_;
$hd->{isDirty} or return;
#- 設(shè)置引導(dǎo)標(biāo)志
for ($hd->{primary}{raw}) {
(grep { $_->{local_start} = $_->{start}; $_->{active} ||= 0 } @$_) or $_->[0]{active} = 0x80;
}
#- 校驗(yàn)分區(qū),校驗(yàn)包括:分區(qū)是否重疊,是否存在未知空洞。
verifyParts($hd);
#- 寫入分區(qū)表
$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 創(chuàng)建文件系統(tǒng)
在分區(qū)操作結(jié)束之后,為了在其上進(jìn)行安裝,還需要在分區(qū)上創(chuàng)建文件系統(tǒng)。安裝程序是使用系統(tǒng)命令,比如mkdosfs,mke2fs,mkreiserfs來(lái)創(chuàng)建文件系統(tǒng)。
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/;
#- 調(diào)用mke2fs創(chuàng)建ext2文件系統(tǒng)
run_program::run("mke2fs", @options, devices::make($dev)) or die _("%s formatting of %s failed", "ext2", $dev);
}
sub format_dos($@) {
my ($dev, @options) = @_;
#- 調(diào)用mkdosfs創(chuàng)建fat文件系統(tǒng)
run_program::run("mkdosfs", @options, devices::make($dev)) or die _("%s formatting of %s failed", "dos", $dev);
}
創(chuàng)建Reiserfs文件系統(tǒng)
sub format_reiserfs($@) {
my ($dev, @options) = @_;
#- 調(diào)用mkreiserfs創(chuàng)建Reiserfs文件系統(tǒng)
run_program::run("mkreiserfs", "-f", @options, devices::make($dev)) or die _("%s formatting of %s failed", "reiserfs", $dev);
}
在使用Reiserfs文件系統(tǒng)作為系統(tǒng)的根分區(qū)時(shí),系統(tǒng)在啟動(dòng)的過程中需要加載模塊reiserfs.o。RedHat 7.0以下的版本則不支持Reiserfs文件系統(tǒng),所以很多基于RedHat的發(fā)行版本也不支持Reiserfs文件系統(tǒng)。如果您要在這樣的系統(tǒng)上加入 reiserfs支持,除了裝載Reiserfs對(duì)應(yīng)的rpm包之外,還要在生成初始啟動(dòng)鏡像(initrd)時(shí),在linuxrc中加載 Reiserfs模塊。
這需要在/sbin/mkinitrd文件中加入下列語(yǔ)句:
# 對(duì)于/etc/fstab中掛接的文件系統(tǒng),如果它的類型不是ext2,那么必須加載設(shè)備模塊。
fs=$(awk '$2 == "/" {print $3 }' /etc/fstab)
[ -n "$fs" -a "$fs" != "ext2" ] && findmodule $fs
4 支持LVM類型的分區(qū)
一般而言,磁盤分區(qū)的大小是固定的,它要求用戶在安裝系統(tǒng)時(shí)對(duì)分區(qū)空間的使用有大概的了解。在用戶用盡了分區(qū)上所有的空間時(shí),則要求重新分區(qū)或者移走一部分文件。
LVM(Logical Volume Management)是邏輯卷管理的縮寫。它的出現(xiàn)將物理磁盤分割成一些邏輯單位,來(lái)自于不同磁盤的分區(qū)能組成一個(gè)邏輯卷。此外,在需要時(shí)分區(qū)能被動(dòng)態(tài)的加入和刪除。舉例來(lái)說,如果你有一個(gè)8GB的磁盤,其上有一個(gè)2GB的分區(qū)/usr,它的空間已經(jīng)耗盡了。如果您要擴(kuò)大/usr分區(qū)的話,必須首先創(chuàng)建一個(gè)更大的分區(qū),然后將/usr的所有內(nèi)容都拷貝到此分區(qū)中,改變/etc/fstab文件,重新啟動(dòng)。但是如果在系統(tǒng)中使用了LVM的話,你只需使用 LVM中的命令,就可以簡(jiǎn)單的增大/usr。
LVM的分區(qū)方式對(duì)于需要大數(shù)據(jù)量存儲(chǔ)的分區(qū)進(jìn)行管理,可以極大的減輕管理員的負(fù)擔(dān)。而且,在LVM和RAID設(shè)備結(jié)合使用之后,可以構(gòu)造出一種靈活而且高效的存儲(chǔ)方案。
4.1 LVM的基本概念
后面在建立LVM類型的分區(qū)時(shí),會(huì)用到一些術(shù)語(yǔ),下面先對(duì)這些術(shù)語(yǔ)進(jìn)行介紹。
物理卷(PV)
物理卷僅僅是進(jìn)行了LVM初始化的物理分區(qū),以使得LVM管理程序能識(shí)別這個(gè)分區(qū)。
物理范圍(PE)
物理范圍是一些大數(shù)據(jù)塊,通常有幾兆字節(jié)。
卷組(VG)
一個(gè)VG可由多個(gè)PE組成。一個(gè)VG可由幾個(gè)分區(qū)組成,它包含的PE由這些分區(qū)提供。在某種意義上說,我們可以認(rèn)為VG就是一個(gè)硬盤設(shè)備。
邏輯卷(LV)
邏輯卷是最終用戶訪問的部分,它用于存儲(chǔ)數(shù)據(jù)。在某種意義上說,我們可以認(rèn)為L(zhǎng)V就是一個(gè)邏輯分區(qū)。其上可以創(chuàng)建任何類型的分區(qū),包括EXT2,ReiserFS,NTFS等等。在訪問時(shí),它和正常的磁盤分區(qū)一樣。
邏輯范圍(LE)
每個(gè)邏輯卷被分割成為數(shù)據(jù)塊。
為了使LVM在系統(tǒng)中能夠正常工作,那么在定制內(nèi)核的時(shí)候,要將LVM支持作為模塊形式定制。然后,為了創(chuàng)建和管理LVM邏輯分區(qū),您還需要安裝LVM包。
步驟如下:
使用fdisk命令設(shè)置分區(qū)/dev/hda3和/dev/hdc3類型為0x8e。
創(chuàng)建物理卷。
pvcreate /dev/hda3
pvcreate /dev/hdc3
創(chuàng)建新卷組newvg,它包含/dev/hda3和/dev/hdc3分區(qū),卷組的大小是兩個(gè)分區(qū)容量的總和。在成功創(chuàng)建此卷組之后會(huì)在/dev目錄下形成目錄/dev/newvg,在其后生成的邏輯卷設(shè)備文件都保存在此目錄下。
vgcreate newvg /dev/hda3
vgcreate newvg /dev/hdc3
創(chuàng)建新的邏輯卷
lvcreate -L1500 -nnewlv newvg
創(chuàng)建一個(gè)1500MB線性邏輯卷,同時(shí)這條命令也創(chuàng)建邏輯卷對(duì)應(yīng)的塊設(shè)備文件/dev/newvg/newlv。
lvcreate -i2 -I4 -l1500 -notherlv newvg
以交錯(cuò)塊(stripe)為2,塊大小為4 KB創(chuàng)建另一個(gè)邏輯卷,對(duì)應(yīng)的設(shè)備別名是/dev/newvg/otherlv。
創(chuàng)建文件系統(tǒng)
mke2fs /dev/newvg/newlv
在設(shè)備/dev/newvg/newlv上創(chuàng)建ext2文件系統(tǒng),除了ext2文件系統(tǒng)之外,您還可以創(chuàng)建Reiserfs等多種文件系統(tǒng)。
激活lvm邏輯卷
vgchange -a y
在使用卷組之前,控制卷組對(duì)內(nèi)核的可見性。這條命令激活系統(tǒng)中所有已知的卷組。在刪除一個(gè)卷組之前,最好先使用vgchange -a n禁用卷組。
讀入LVM分區(qū)信息 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分區(qū)操作寫入磁盤 #- 對(duì)已經(jīng)刪除的lvm分區(qū),則除去其上的邏輯卷,然后將其除去。
#- 若只有部分邏輯卷被除去,則刪除這部分邏輯卷
foreach my $lv (@{$o->{lvms}}) {
if ($lv->{isRemove}) {
#- 除去所有的邏輯卷
foreach (fsedit::get_fstab($lv)) {
lvm::lv_delete($_);
}
#- 清空主分區(qū)描述結(jié)構(gòu)
splice @{$lv->{primary}{normal}}, 0;
#- 清除卷組
lvm::vg_destroy($lv);
} else {
foreach (fsedit::get_fstab($lv)) {
lvm::lv_delete($_) if ($_->{isRemove});
}
} 
}
foreach my $lv (@lvm) {
#- 對(duì)現(xiàn)在存在的lvm分區(qū),如果是新創(chuàng)建的,則創(chuàng)建新的卷組
#- 否則,找出新添加的卷組,并將其加入已存在的卷組中
if ($lv->{isCreate}) {
lvm::vg_add($_) foreach (@{$lv->{disks}});
} else {
lvm::vg_add($_) foreach (grep { $_->{isNewPV} } @{$lv->{disks}});
}
#- 對(duì)于卷組上存在的邏輯卷,如果是新創(chuàng)建的,則調(diào)用lv_create創(chuàng)建。
my @fstab = get_all_fstab($lv);
foreach (@fstab) {
lvm::lv_create($lv, $_) if ($_->{isCreate});
}
#- 重新創(chuàng)建卷組的主分區(qū)結(jié)構(gòu),設(shè)置安裝點(diǎn)和格式化標(biāo)志
lvm::get_lvs($lv);
foreach my $f (fsedit::get_fstab($lv)) {
foreach (@fstab) {
if ($_->{type} && $f->{device} eq $_->{device}) {
$f->{mntpoint} = $_->{mntpoint};
$f->{toFormat} = $_->{toFormat};
}
}
}
}
#- 生成/etc/lvmtab描述文件,同時(shí)激活卷組
if (@lvm) {
run_program::run('vgscan') if !-e '/etc/lvmtab';
run_program::run('vgchange', '-a', 'y');
}
為了在系統(tǒng)啟動(dòng)時(shí)能夠加載lvm-mod.o模塊,掃描物理卷,生成正確的描述文件/etc/lvmtab,同時(shí)激活LVM分區(qū),又由于基于 RedHat的發(fā)布缺省情況下是不支持LVM的分區(qū)方式,您還需要修改初始啟動(dòng)腳本文件/etc/rc.d/rc.sysinit文件,在其中加入如下語(yǔ)句:
# 創(chuàng)建/etc/lvmtab文件
if [ -x /sbin/vgscan ]; then
/sbin/vgscan > /dev/null 2>&1
fi
# 激活lvm分區(qū),如果不進(jìn)行激活操作,lvm分區(qū)無(wú)法正常工作
if [ -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action "Setting up LVM:" /sbin/vgchange -a y
fi
5 支持軟Raid分區(qū)
軟件Raid分區(qū)支持是指Linux系統(tǒng)不借助任何硬件支持,在普通ide或scsi硬盤上實(shí)現(xiàn)Raid功能。這首先需要內(nèi)核的支持,其次還需要安裝raidtools包。
5.1 Raid設(shè)備概念
Linear模式
兩個(gè)或者多個(gè)磁盤被組合成一個(gè)物理設(shè)備,這些磁盤是疊加使用的。也就是說,RAID設(shè)備會(huì)先裝滿第一個(gè)磁盤,然后第二個(gè)磁盤,以此類推。每個(gè)磁盤的大小不必相同。
使用此模式Raid設(shè)備不提供冗余信息。如果一個(gè)磁盤崩潰了,你將會(huì)丟失所有的數(shù)據(jù)。對(duì)于單個(gè)讀寫操作,讀寫性能都沒有任何提升,但是當(dāng)多個(gè)用戶共享RAID設(shè)備時(shí),如果用戶訪問的文件在不同的磁盤上,那可能會(huì)使訪問性能更高。
RAID-0模式
這種模式也被稱為交錯(cuò)(Stripe)模式。RAID0要求磁盤(分區(qū))具有近似的大小。它的所有磁盤讀/寫操作時(shí)并行完成的。如果其中一個(gè)分區(qū)比另外一個(gè)分區(qū)大得多,那么在使用這些空間時(shí),并行操作無(wú)法完成,導(dǎo)致性能下降。
這種模式也不存在數(shù)據(jù)冗余。如果一個(gè)磁盤損壞,將導(dǎo)致所有數(shù)據(jù)丟失。但是,在此種模式下,因?yàn)椴⑿写嫒∽x寫性能會(huì)提升。這是使用RAID0的主要原因。
RAID-1模式
此種模式具有數(shù)據(jù)冗余性。RAID-1缺省時(shí),使用兩塊磁盤,同時(shí)也可以指定多塊備用盤。這個(gè)模式下的兩個(gè)硬盤互為鏡像。這就要求這兩個(gè)磁盤的大小一致,否則RAID設(shè)備的大小等于最小的磁盤。
在任何一個(gè)磁盤崩潰之后,數(shù)據(jù)都會(huì)保持完整并可立即進(jìn)行重建。在此種方式下,讀性能會(huì)得到很大的提升,但是寫磁盤的性能保持不變或者有所下降。
RAID-4模式
這種模式不是經(jīng)常使用,用于三個(gè)或者多個(gè)磁盤上。這種模式采用數(shù)據(jù)塊存儲(chǔ)方式,將校驗(yàn)數(shù)據(jù)單獨(dú)存在一個(gè)磁盤上,寫數(shù)據(jù)到其他磁盤時(shí)采用和RAID-0相似的方式。因?yàn)橐粋€(gè)磁盤用于奇偶校驗(yàn),所以RAID陣列的大小為(N-1)*S(S為陣列中最小的磁盤尺寸)。
在一個(gè)磁盤失效之后,奇偶信息會(huì)用于重構(gòu)所有數(shù)據(jù)。但如果有兩個(gè)磁盤崩潰,所有數(shù)據(jù)將會(huì)丟失。但是奇偶信息保存在一個(gè)磁盤上,每次數(shù)據(jù)更新都會(huì)訪問這張磁盤,因此這張磁盤會(huì)成為瓶頸。
RAID-5模式
在需要組合大量的物理磁盤時(shí),這是最有用的RAID方式。它也用在三個(gè)或者多個(gè)磁盤上,RAID陣列的大小為(N-1)*S。此種模式采用數(shù)據(jù)塊存儲(chǔ)方式,將校驗(yàn)數(shù)據(jù)分布保存在各個(gè)磁盤上,避免了RAID-4的瓶頸問題。
如果一塊磁盤崩潰,在存在備用盤的情況下,重構(gòu)立即開始。但是如果有兩個(gè)磁盤崩潰,所有數(shù)據(jù)將會(huì)丟失。在此種方式下讀寫的性能都將有所提升。
5.2 Raid設(shè)備安裝
在Linux系統(tǒng)下為了安裝RAID設(shè)備,必須首先安裝raidtools工具,創(chuàng)建/etc/raidtab文件,描述創(chuàng)建的RAID陣列的類別。然后使用mkraid命令創(chuàng)建RAID分區(qū)。
mkraid /dev/md0
這條命令初始化RAID陣列,寫永久超級(jí)塊并且啟動(dòng)陣列。然后察看/proc/mdstat,應(yīng)該見到陣列正在運(yùn)行。最后,可以創(chuàng)建文件系統(tǒng),并在fstab中掛接它。
下面是配置不同RAID模式時(shí),raidtab文件的內(nèi)容:
線性模式 raiddev /dev/md0
raid-level linear
nr-raid-disks  2
chunk-size 32
persistent-superblock 1
device /dev/hdb6
raid-disk  0
device /dev/hdc5
raid-disk  1
RAID-0模式 raiddev /dev/md0
raid-level 0
nr-raid-disks  2
persistent-superblock 1
chunk-size 4
device /dev/hdb6
raid-disk  0
device /dev/hdc5
raid-disk  1
RAID-1 raiddev /dev/md0
raid-level 1
nr-raid-disks  2
nr-spare-disks 0
chunk-size 4
persistent-superblock 1
device /dev/hdb6
raid-disk  0
device /dev/hdc5
raid-disk  1
若有備用盤,可以增加它們到設(shè)備規(guī)范的尾部,例如:
device /dev/hdd5
spare-disk 0
spare-disk的設(shè)定值應(yīng)該與nr-spare-disks項(xiàng)的設(shè)置一致。
mkraid /dev/md0啟動(dòng)鏡像初始化(鏡像重構(gòu))。重構(gòu)過程使用空閑的I/O帶寬,重構(gòu)過程是透明的,重構(gòu)時(shí)仍能使用這個(gè)設(shè)備。在重構(gòu)運(yùn)行時(shí),格式化、掛接和使用設(shè)備都可以使用。
Raid-4 raiddev /dev/md0
raid-level 4
nr-raid-disks  4
nr-spare-disks 0
persistent-superblock 1
chunk-size 32
device /dev/hdb1
raid-disk  0
device /dev/hdc1
raid-disk  1
device /dev/hdd1
raid-disk  2
device /dev/hde1
raid-disk  3
若有備用磁盤,添加
device /dev/hdf1
spare-disk 0
mkraid /dev/md0進(jìn)行初始化。使用帶有特殊選項(xiàng)的mke2fs進(jìn)行格式化。
mke2fs -b 4096 -R stride=8 /dev/md0
Raid-5 raiddev /dev/md0
raid-level 5
nr-raid-disks  7
nr-spare-disks 0
persistent-superblock 1
parity-algorithmleft-symmetric
chunk-size 32
device /dev/hda3
raid-disk  0
device /dev/hdb1
raid-disk  1
device /dev/hdc1
raid-disk  2
device /dev/hdd1
raid-disk  3
device /dev/hde1
raid-disk  4
device /dev/hdf1
raid-disk  5
device /dev/hdg1
raid-disk  6
運(yùn)行mkraid /dev/md0,使用帶有特殊選項(xiàng)的mke2fs格式化陣列。例如:
mke2fs -b 4096 -R stride=8 /dev/md0
stride=8表示raid塊為8個(gè)文件系統(tǒng)塊大小,即為32KB。
5.3 啟動(dòng)Raid設(shè)備
在創(chuàng)建了正確的RAID描述文件,并使用mke2fs文件創(chuàng)建了正確的文件系統(tǒng)之后,您還需要執(zhí)行命令:
raidstart /dev/md0
啟動(dòng)RAID設(shè)備。在執(zhí)行此命令之后,內(nèi)核的RAID子系統(tǒng)就自動(dòng)地在后臺(tái)開始工作了。在修改RAID設(shè)備對(duì)應(yīng)的分區(qū)時(shí),為了保證數(shù)據(jù)不發(fā)生錯(cuò)誤,必須先用
raidstop /dev/md0
停止此設(shè)備,然后才能進(jìn)行修改。
#- 下面的代碼是安裝程序中創(chuàng)建raid設(shè)備的模塊。
#- 根據(jù)raid設(shè)備結(jié)構(gòu),創(chuàng)建/etc/raidtab文件和軟Raid分區(qū):
sub make
{
my ($raid) = @_;
isMDRAID($_) and make($raid, $_) foreach @{$raid->{disks}};
#- 創(chuàng)建raid設(shè)備
my $dev = devices::make($raid->{device});
#- 根據(jù)raid級(jí)別,加載對(duì)應(yīng)的設(shè)備模塊
eval { modules::load(module($raid)) };
run_program::run("raidstop", $dev);
#- 創(chuàng)建/etc/raidtab文件和軟Raid分區(qū)
&write($raid, "/etc/raidtab");
run_program::run("mkraid", "--really-force", $dev) or die
$::isStandalone ? _("mkraid failed (maybe raidtools are missing?)") : _("mkraid failed");
}
在RAID設(shè)備作為系統(tǒng)的根分區(qū)安裝之后,為了使系統(tǒng)能夠正常啟動(dòng),整個(gè)的系統(tǒng)環(huán)境還要做到自動(dòng)檢測(cè)RAID設(shè)備并正確掛接分區(qū)。這需要下列步驟:
定制的系統(tǒng)內(nèi)核支持raid設(shè)備自動(dòng)檢測(cè)。也就是說,在編譯內(nèi)核時(shí)選擇: Multi-device support (RAID and LVM)
[*] Multiple devices driver support (RAID and LVM)
<*>RAID support
將設(shè)備模塊md.o打入內(nèi)核。如果對(duì)此設(shè)備的支持選擇了內(nèi)核模塊的方式,那么軟件RAID分區(qū)無(wú)法作為根分區(qū)啟動(dòng)系統(tǒng)。這主要是因?yàn)镽AID設(shè)備需要在啟動(dòng)之初對(duì)硬盤進(jìn)行讀寫,以決定RAID分區(qū)的位置,類型等參數(shù)。如果不將md.o置入內(nèi)核,僅選擇模塊方式,那么它將從初始內(nèi)存鏡像中進(jìn)行加載,但是加載過后無(wú)法完成上述的信息讀取過程。
用帶有persistent-superblock的選項(xiàng)創(chuàng)建RAID設(shè)備。
RAID的設(shè)備分區(qū)類型必須設(shè)為0xFD。
正確的配置RAID陣列,并在RAID系統(tǒng)上建立了正確的文件系統(tǒng)。
必須創(chuàng)建初始啟動(dòng)鏡像,這樣保證在啟動(dòng)時(shí)能夠加載raid設(shè)備模塊。
mkinitrd --with=raid5 raid-ramdisk 2.4.3
糾正/etc/fstab文件,使/dev/md0為根文件系統(tǒng)對(duì)應(yīng)的設(shè)備文件,并使引導(dǎo)時(shí)所用的分區(qū)包含在fstab中。

熱詞搜索:

上一篇:構(gòu)造Linux的圖形化安裝程序(2)
下一篇:構(gòu)造Linux的圖形化安裝程序(4)

分享到: 收藏
主站蜘蛛池模板: 老司机免费看视频| 今天上午拳王争霸赛直播| 《禁忌4》| 海绵宝宝第十四季| 光明力量2古代封印攻略| 李保国电影| 奇梦石| 田中敦子| 西游记tvb| 小数加减法评课| 怎么剪福字简单方法视频 | 爷爷泡的茶歌词| 黄视频在线网站| 子宫在肚子的哪个位置| 电影《重生》| 功夫2免费观看普通话2021| 诡娃| 中国的省份有哪些?| 母亲とが话しています免费| 黑太阳731在线观看| 未来警察| 骨骺线闭合增高9厘米| 德鲁| 河南省物业管理条例| 成人免费视频在线播放| 应晓薇个人资料| 红电视剧演员表| 封顶仪式| 饭店装修效果图| 全蚀狂爱| 念亲恩简谱| jenna haze| 电影《重生》| 以下关于宏病毒说法正确的是| 抓特务| 白洁少妇董汐星空传媒影视| 怎么做发射器| 羞羞的影评| 欧美xxxx做受性欧美蜜臀av| 1988田螺姑娘| 黑暗圣经在线观看|