linux系統升級指南(轉)

gugu99發表於2007-08-10
linux系統升級指南(轉)[@more@]

  

  本文是假設您已經使用 Linux 一段時間,隨著硬體的升級或空間不足,必須要升級 Linux 系統,抑或是想提供更多的網路服務給使用者,因應這個需求而編寫的。

  一、調整虛擬記憶體:

  在 Linux 上是使用 swap 技術將硬碟空間挪用為虛擬記憶體,當伺服器建置完成使用一段日子以後,有可能會擴充硬體,其中又以擴充主儲存器來改善執行效能最為普遍,在這種情形下,就需要增加 swap 虛擬記憶體的容量。

  由於 swap 跟 LVM 機制一樣能將多塊磁碟分割區虛擬成一塊,因此我們並不需要將舊的 swap 扇區先移除,或是直接修改 swap 扇區大小,而是可以採用追加 swap 扇區的方式來配置。做法如下:

  mkswap /dev/hdx2(將新扇區格式化為 swap)

  swapon /dev/hdx2(立即啟用新的 swap 扇區)

  修改 /etc/fstab 加入下面這一行

  /dev/hdx2 swap swap defaults 0 0

  如果硬碟已經沒有剩餘空間,而且無法加裝新的硬碟,這種情況下,我們沒辦法變更 swap 扇區來滿足需求,但是可以挪用已經掛載的分割區一部分空間,以檔案的形式來追加 swap 虛擬記憶體的容量:

  dd if=/dev/zero of=/swapfile bs=1024 count=65536(建立 /swapfile 檔案,單位為 KB,所以這是 64MB)

  mkswap /swapfile(將該檔案空間格式化為 swap)

  swapon /swapfile(立即啟用新的 swap 檔案)

  修改 /etc/fstab 加入下面這一行

  /swapfile swap swap defaults 0 0

  Linux 並沒有辦法搬移 swap 扇區,如果想要把 swap 作成單一一個扇區,必須先將舊 swap 扇區移除,再加入新的 swap 扇區,如果先加入新扇區,則新舊扇區會聯合運作,造成舊扇區無法移除的現象。移除 swap 扇區的方法如下:

  swapoff /dev/hdx2(關閉 swap 功能)

  修改 /etc/fstab 移除 /dev/hdx2 那一行

  二、載入硬碟與檔案系統轉換:

  當硬碟不敷使用時,需要加掛新的硬碟到系統上,加掛硬碟的做法很簡單,先使用 fdisk 或 parted 將扇區分割好,接著使用 mkfs 指令來格式化硬碟,最後修改 /etc/fstab 讓系統重開機後能自動掛載新的硬碟。fdisk 的使用方法如下:

  #> fdisk /dev/hdb(假設要加掛的硬碟,是接在第一條排線的第二個位置)

  The number of cylinders for this disk is set to 2498.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): m

Command action

a

b

c

d

m

n

o

p

q

s

t

u

v

w

x toggle a bootable flag

edit bsd disklabel

toggle the dos compatibility flag

delete a partition

list known partition types

print this menu

add a new partition

create a new empty DOS partition table

print the partition table

quit without saving changes

create a new empty Sun disklabel

change a partition's system id

change display/entry units

verify the partition table

write table to disk and exit

extra functionality (experts only)

Command (m for help):

  先用 l 指令列出所有已分割好的扇區,你可以使用 d 指令將不要的扇區刪除,或使用 t 指令將扇區的檔案系統改為 Linux 用的 82(swap) 或 83(ext2,ext3),假如硬碟是空的尚未分割任何扇區,這時候請用 n 指令建立扇區,所有需要的修改完成後,輸入 w 指令將設定儲存起來,然後重開機讓修改生效,以便進行後續動作。

  扇區分割好了以後,必須針對每個不同檔案系統將扇區格式化,swap 扇區格式化的方法前面已經提過,而作為一般用途的扇區,建議直接格式化為 ext3:

  /sbin/mkfs -t ext3 /dev/hdb1(將空白扇區格式化為 ext3)

  ext3 是從 ext2 改良而來,主要是挪用 ext2 一些 inode 拿來做成日誌檔案(.journal),因此它與 ext2 只有些微不同,兩種系統也可以很容易互相轉換(轉換完仍需自行修改 /etc/fstab 組態):

  /sbin/mke2fs /dev/hdb1(將空白扇區格式化為 ext2)

  /sbin/tune2fs -j /dev/hdb1 (將 ext2 轉為 ext3,轉換時順便建立日誌檔案)

  當新扇區格式化好了之後,就可以將它掛載上來,您可以直接指定要掛載的扇區型態:

  /sbin/mount -t ext3 /dev/hdb1 /mount/point(指定掛載 ext3 扇區到 /mount/point 目錄)

  或先修改 /etc/fstab 然後再掛載,修改 /etc/fstab 的方法是插入下面這一行:

  /dev/hdb1 /mount/point ext3 defaults 0 0

  接著掛載時不需指定扇區型態及裝置名稱,指令如下:

  /sbin/mount /mount/point

  已經格式化為 ext3 的扇區,如果要掛載到 6.X版以前的系統上使用,必須將格式改回 ext2,變更方法如下:

  /sbin/tune2fs -O ^has_journal /dev/hdb1 (通知 kjournald 關閉日誌檔案功能)

  mount -t ext2 /dev/hdb1 /mount/point(將 ext3 掛載為 ext2)

  rm -f .journal(刪除日誌檔案)

  將 ext2 轉換成 ext3 有許多好處,包括速度快、安全、高可用性、修復省時......等等優點。簡單的講,所謂 journal 就是把檔案讀寫動作逐項紀錄下來,當硬碟未正常關機(unclean shutdown)時,不需要檢查硬碟(e2fsck)直接可以掛載(mount),如果以 fsck 強制修復硬碟,則直接從日誌檔案讀取需要修復的扇區資料,而不需要整顆硬碟都檢查。由於這些優點,我們也建議不要再使用舊的 ext2 格式。

  掛載好後,如需進行資料移轉,可以使用 cp -Rp 指令,引數 R 表示連子資料夾一起備份,引數 p 表示要保留所有檔案許可權設定,例如:cp -Rp /home /home1

  三、升級磁碟系統:

  LVM 邏輯扇區

  事實上新版 Linux 由於提供 LVM (Logical Volume Manager)功能,可以將多個扇區組合成一個 VG(Volume Group),然後將一個 VG 掛載成單一一個目錄,這樣就可以做到扇區合併的效果,省掉轉移資料的麻煩,要使用這項功能,首先在安裝 Linux 時,必須先將可能會事後擴充的扇區做成 LVM 扇區型態(代號是 8e),如果您在安裝時沒有啟用這項功能想要事後補做,那樣可行不通,因為修改扇區型態將會造成所有資料遺失!

  如果是新硬碟上的扇區,請用 fdisk 修改好扇區型態後,利用以下指令來做起始化的動作,在底下的例子裡,我們會把新硬碟上的三個扇區合併成一個,並在稍後加入第四個扇區以擴充容量(透過這些步驟,可以瞭解當初 Linux 安裝程式幫我們裝 LVM 時,到底做了哪些事情):

  /sbin/pvcreate /dev/hdb1

  /sbin/pvcreate /dev/hdb2

  /sbin/pvcreate /dev/hdb3

  然後需建立 VG,建立好的 VG 將被視為一個裝置名稱,事後可以用 /dev/VG_name 來引用它:

  /sbin/vgcreate new_home /dev/hdb1 /dev/hdb2 /devhdb3

  對於 VG 這種裝置來說,仍必須進一步在上面分割邏輯扇區才能使用,我們不妨把 VG 想象成是一個外掛的 SCSI 磁碟陣列,對主機板來說,他被視為單一一顆硬碟(LVM 並不是真正的 RAID 系統,因為它只能實作 RAID0,事實上 2.4.x 版的 kernel 另外還提供 softRAID 功能,在後面說明)。既然它是一種裝置,當然無法直接掛載使用,必須先進一步作虛擬分割及格式化的動作, 下面的例子裡,我們僅分割單一一個扇區:

  /sbin/lvcreate -L 30g new_home(將 new_home 虛擬裝置中的 30 GB 空間割成一個虛擬延伸扇區)

  使用 lvcreate 指令除了可以分割l邏輯延伸扇區(所謂延伸是指可以動態變大,當然變小也是可以,但應該沒有人會這麼做),還可以分割一種稱為快照的扇區,這可以用來自動備份某塊邏輯延伸扇區,而這種備份是 自動進行的,並不需要人力介入管理。

  一但邏輯扇區分割好了,依照慣例仍然得先將扇區格式化,一般是格式化成 ext3:

  /sbin/mkfs -t ext3 /dev/new_home/lvol1(由於當初分割扇區時未使用 -n 引數來指定名稱,因此係統會自動編號)

  格式化好的扇區就可以直接掛載使用:

  mkdir /home2

  mount -t ext3 /dev/new_home/lvol1 /home2

  接下來進行檔案轉移:

  cp -Rp /home /home2(將使用者檔案從實體扇區複製到 lvm 扇區)

  以光碟片開機進入 rescue mode

  rm -rf /home (將 /home 刪除)

  mkdir /home (建立掛載點)

  mount -t ext3 /dev/new_home/lvol1 /home (重新將 /dev/new_home/lvol1 掛載到 /home)

  rmdir /home2(刪除掛載點)

  緊接著修改 /etc/fstab 來掛載這個新作好的邏輯扇區:

  /dev/new_home/lvol1 /home ext3 defaults 0 0

  重開機後,系統會嘗試掛載該虛擬扇區,如果掛載失敗,請在 /etc/rc.d/rc.local 加入以下指令:

  vgchange -a y new_home

  mount /dev/new_home/lvol1 /home

  假如使用一段時間後, /home 的空間不足,這時我們可以動態加入新的實體扇區(以 /dev/hdb4 為例)來擴充空間:

  以 fdisk 修改 /dev/hdb4 的扇區型別為 8e

  /sbin/pvcreate /dev/hdb4 (邏輯扇區起始化)

  /sbin/vgextend new_home /dev/hdb4(將實體扇區加入到虛擬裝置上)

  /sbin/lvextend -L +10g /dev/new_home/lvol1 /dev/hdb4(從該實體扇區擴充 10GB 空間至邏輯扇區)

  完成以上步驟後,現在的 /home 空間容量已經變成 40GB!然而使用 df 指令去檢視 inode,卻發現空間沒有增加,經過測試後發現必須重新mkfs才能使用新的空間,這個缺點讓 LVM 有點美中不足。

  SoftRAID 軟體磁碟陣列

  使用軟體磁碟陣列應該在安裝 Linux 時,直接透過 Disk-Druid 來設定比較方便,如果事後想要手動加上去,步驟比較繁雜,首先和 LVM 系統一樣,你必須先使用 fdisk 將預先割好要作磁碟陣列的分割區改為 fd 型別,千萬不要拿已經有資料的 Linux ext2 或 swap 來改,否則資料會全部遺失,修改方法請自行參考前面的解說。特別要注意的是,要作磁碟陣列的分割區其容量必須一致,不可以有大有小!

  改好扇區型別後,請用底下指令建立軟體磁碟陣列組態檔案:

  touch /etc/raidtab

  該檔案內容如下:

  raiddev /dev/md0 //定義磁碟陣列的裝置名稱

  raid-level 1 //定義磁碟陣列的等級,RAID 1 就是 Mirror

  nr-raid-disks 2 //定義磁碟陣列是由多少實體分割區組成的

  chunk-size 64k //定義 chunk 大小,由於是軟體陣列所以是使用系統主儲存器來進行 chunk,這個數值設大一點雖然對磁碟陣列效能有幫助,但卻會耗掉系統資源,建議使用預設值就好了

  persistent-superblock 1//啟用 superblock,這是用來作磁碟定址,它能幫助 kernel 在偵測 RAID 磁碟時不會誤判

  nr-spare-disks 0 //定義備用的扇區

  device /dev/hda1 //定義組成 RAID 的第一塊實體分割區

  raid-disk 0

  device /dev/hdc1 //定義組成 RAID 的第二塊實體分割區

  raid-disk 1

  以上面這個例子來說,作好的磁碟陣列在寫入資料時,兩個實體分割區都會寫入資料,讀取資料時,則只要其中一個扇區能正常讀取即可,這樣就可以充分利用磁碟陣列的好處來進行資料保全。做好組態設定以後,接下來請以下列指令開始製作磁碟陣列:

  mkraid /dev/md0

  磁碟陣列一但製作好了,依然得先將扇區格式化,一般是格式化成 ext3:

  /sbin/mkfs -t ext3 /dev/md0

  格式化好的扇區就可以直接掛載使用:

  mkdir /secure_data

  mount -t ext3 /dev/md0 /secure_data

  資料保全測試:

  使用 fdisk 將 RAID 磁碟陣列其中一個實體分割區刪除後,重新開機,發現 RAID 啟用時出現錯誤訊息,警告我們有部分磁碟損毀,但儲存的資料仍然具全沒有遺失。

  如果開機訊息閃得太快沒有看清楚,可以使用底下指令來觀察:

  lsraid -a /dev/md0

  將該分割區重新分割並修改格式為 fd 後,進行資料復原工作:

  raidhotadd /dev/md0 /dev/hdc1(將空白扇區 /dev/hdc1 加入 RAID 中並復原資料)

  完成以上步驟後,再使用 lsraid 指令來觀察,發現 RAID 裝置已經恢復正常。

  四、工作管理程式:

  Linux 提供四種自動執行程式的機制,包含:cron、anacron、at 和 batch。使用時機分述如下:

  cron 主要用來做週期性工作的管理程式,會根據系統時間來判斷程式是否該執行,萬一系統時間設定不正確將會造成程式錯亂。

  anacron 和 cron 一樣也是用來做週期性工作的管理程式,但是它不檢查系統時間,而改以讀取時間戳記來計算間隔日數,依間隔日數判斷是否該執行,適用於每天、每週或每月只執行一次的工作。

  at 讓指定程式在某個時間點到達時自動執行,適用於只執行一次的工作。

  batch 指定工作在系統閒置時執行,可用來避開高負載時段。

  使用 cron 前請先確定管理程式是否已經執行,可以使用以下指令來檢視:

  /sbin/service crond status

  雖然 cron 允許使用者自行安排自己的工作,以方便在結束聯機後,程式能自動運作,但這類工作對於已經提供多種網路服務的伺服器來說負擔太大,因此建議不要教使用者使用它,本文也不討論這類的事情,畢竟我們的伺服器只是 PC,不是 main frame。

  cron 的主要設定檔 /etc/crontab 內容如下:

  SHELL=/bin/bash

  PATH=/sbin:/bin:/usr/sbin:/usr/bin

  MAILTO=root

  HOME=/

  # run-parts

  01 * * * * root run-parts /etc/cron.hourly

  02 4 * * * root run-parts /etc/cron.daily

  22 4 * * 0 root run-parts /etc/cron.weekly

  42 4 1 * * root run-parts /etc/cron.monthly

  前面幾行是定義 cron jobs 執行時的環境,我們不需要去修改它,底下四行是用來定義工作管理程式,上面看到的是系統管理程式的定義區分為七個欄位,分別代表:分、時、日、月、星期、執行時的身分、要執行的 script,而一般的工作則只區分為六個欄位,前五個欄位與系統管理程式相同,最後一個欄位則是要執行的工作。

  欄位 有效數值

  分 0~59, * 代表每分鐘都要執行,1-4 是指前四分鐘各要執行一次,如果執行的時間不是連續的,可以用逗號來區隔,例如:5,10,15,20 代表第五分鐘、第十分鐘、第十五分鐘、第二十分鐘時要執行,如果每隔五分鐘要執行一次,可以簡寫為 */5。

  時 採用 24 時制,有效數值為 0~23,可以使用 * - , / 等通配字元,意義同上。

  日 1~31,如果使用 30,則每逢二月會跳過不執行,如果使用 31,會變成大月時才執行,因此對於每月都得執行一次的工作,請安排在 28 日以前執行。當月份有指定時,必須為有效日期,否則該工作將永遠不執行。通配字元使用方式同上。

  月 1~12,也可以直接用英文縮寫:jan、feb......等。 通配字元使用方式同上。

  星期 0~7,其中 0 和 7 都代表星期天,也可以使用英文縮寫:sun、mon......等。 通配字元使用方式同上。

  如果要執行的工作是屬於每天、每週或每月執行一次,建議改用 anacron 以確保一定會執行,如果是每小時要執行,建議直接在 /etc/cron.hourly 目錄內直接新增一個定義檔案,語法需與 /etc/crontab 相同。 其它情形則把定義檔放置在 /etc/cron.d,這裡的定義檔將會每分鐘都檢查一次。

  anacron 的設定檔位於 /etc/anacrontab,如前所述它是以檢查時間間隔的方式來決定是否執行,因此不受系統時間設定的影響,為了要檢查時間間隔必須紀錄每個工作每次執行時的時間戳記(timestamp),這些檔案會放置在 /var/spool/anacron 目錄裡面。

  anacron 設定檔案分為間隔週期、執行延遲時間、工作識別名稱、 要執行的工作四個欄位,說明如下:

  欄位 使用說明

  間隔週期 每次執行工作時應相隔幾天,小於一天的請改用 cron

  執行延遲時間 當距離上次執行的時間超過時間間隔,這表示中間有執行失敗的情形,這種情形下在延遲幾分鐘後,該工作會再嘗試執行一次。

  工作識別名稱 用來識別不同工作,同一名稱不能重複使用。

  要執行的工作 通常是一個命令或 script

  anacron 的設定檔預設內容如下:

  SHELL=/bin/sh

  PATH=/sbin:/bin:/usr/sbin:/usr/bin;/usr/local/sbin;/usr/local/bin

  # These entries are useful for a Red Hat Linux system.

  1 5 run-parts /etc/cron.daily

  7 10 run-parts /etc/cron.weekly

  30 15 run-parts /etc/cron.monthly

  這個設定可以用來確保 cron job 一定會如期執行。

  at 指令用來執行一次性的工作而非週期性的工作,我們可以指定要執行的時間,它和 cron 一樣會檢查系統時間的設定,因此設定錯誤會造成工作無法正確執行,設定方式如下:

  at 16:00 011503[ ENTER](排定執行時間是 2003年1月15日下午4點)

  at> perl /root/backup.pl[Ctrl-D]

  我們可以使用 atq 指令來查詢現在尚未執行的預定工作。

  如果想根據主機負載情形來決定執行時間,必須使用 batch 指令,實際上 batch 指令算是 at 的特殊應用,使用方式如下:

  batch[ ENTER](不用指定執行時間)

  at> perl /root/backup.pl[Ctrl-D]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-939942/,如需轉載,請註明出處,否則將追究法律責任。

相關文章