顯示具有 LPI 標籤的文章。 顯示所有文章
顯示具有 LPI 標籤的文章。 顯示所有文章

2007年9月11日 星期二

檔案權限的應用 -2(Application of Permission -2)

4 則留言:
昨天,我說明了有關WINDOWS的檔案權限,今天就針對LINUX來稍做介紹吧!

其實我一開始就有說過,WINDOWS與LINUX的檔案權限原本就有點類似,除了在安全性(預設值)的差別之外,不過...因為WINDOWS對於圖形介面還是比文字介面人性化一點(就像玩LINUX的人用它的圖形化設定,有時也會霧煞煞一樣)。

所以在LINUX上的檔案權限設定,筆者就會以文字模式來做介紹,如有遺漏之處,還請大家留言或指正(最近一直被網友們抓到發現自己的疏忽...ORZ),不過這一篇文章會比較類似我去上LPI課時的筆記,所以會比較「生硬」一些!

檔案權限的觀念:
1.不是繼承的模式(跟WINDOWS系統的預設值不同)。
2.每個權限都是獨立的(可寫入不代表可讀取)。
3.管理員(SUPER USER = root)有絕對的權限。

LINUX的檔案格式:共有十個欄位(特殊權限外,其餘為三個一組)
       3
        ↓
例:-rw-r--r--(為了標示方便,故以全型表示)
  ↑  ↑      ↑
  1 2     4

欄位說明:
1.檔案類型:用來標示該檔案或資料夾種類。
 (-:一般檔案、d:資料夾、l:連結資料)
2.擁有者的權限:用來設定此檔案或資料夾擁有者的權限。
3.擁有群組的權限:用來設定此檔案或資料夾擁有群組的權限。
4.其它人的權限:用來設定此檔案或資料夾給其它人的權限。

其中,對於檔案權限的設定方式以二進位(1、2、4)或文字(r、w、x)代表

說明:
1.二進位:1=執行、2=寫入、4=讀取
2.文字法:x=執行、w=寫入、r=讀取

 rwx = 4+2+1=7
 rw- = 4+2+0=6
 r-x = 4+0+1=5
 r-- = 4+0+0=4
 -wx = 0+2+1=3
 -w- = 0+2+0=2
 --r = 0+0+1=1
 --- = 0+0+0=0
          5
           ↓
實例:  -rwxr-x--x
      ↑  ↑      ↑
 二進位:0  7     1

說明: 特殊權:無
    使用者:有讀取、寫入和執行的權限
   使用群組:有讀取和執行的權限
    其它人:有執行的權限

對於檔案、資料夾都具備權限的觀念,可是意義上卻有很大的不同之處:

         檔案(FILE)   資料夾(DIR.)
  -------------------------
    r │   可讀取   │  只能讀檔名  │
  ----│---------│---------│
    w │   可寫入   │  能搬移目錄  │
  ----│---------│---------│
    x │   可執行   │  能進入目錄  │
  ----│---------│---------│

變更權限的指令:chmod
用法:chmod 777 test(改變test檔案成全部人都能讀取、寫入和執行)
   chmod g+w test(針對test檔案的群組,加入寫入的權限)
   chmod ugo+w test(test檔案的擁有者、群組和其它人都加入寫入權限)

變更擁有者/群組的指令:chown/chgrp
用法:chown test file(改變file的擁有者為test)
   chgrp test file(改變file的群組為test)
   chown test.test file(改變file的擁有者和群組皆為test)

說明:在LINUX中檔案預設有擁有者、群組兩種特性,兩者間可用「.」區隔。

特殊權限說明:實例可參考(#ls -al /usr/bin/passwd)

      setgid
       ↓
例:-rwsr-xr-x 1 root root ... /usr/bin/passwd
    ↑      ↑
   setuid    sticky

特殊權限:(加在原有權限上)
     111   111   111   111
    特殊權限   擁有者   群組    其它人
            u     g     o
    小寫      s     s     t(原有x權限)
    大寫      S     S     T(原無x權限) 

例:chmod 4766 file(file的u、g和o權限中都加上特殊權限)
  =chmod u+s file(原有x權限)
   chmod g+S file(原無x權限)
   chmod o+T file(原無x權限)

特殊權限說明:
           檔案(FILE)        資料夾(DIR.)
 ------------------------------------
 setuid │暫時切換該執行檔擁有者│      系統會忽略     │
 -------│-----------│----------------│
 setgid │暫時切換該執行檔的群組│建立檔案的擁有群組會與該目錄相同│
 -------│-----------│----------------│
 sticky │與上述相同(系統忽略)│其它人不能夠刪除不屬於自己的檔案│
 -------│-----------│----------------│

遮罩說明系統內建的umask=022(例:test建立一個檔案與資料夾)

系統中預設權限:檔案=666、資料夾=777
加上系統的遮罩:umask=022

預設建立值:檔案=644、資料夾=755(不是666-022=644或777-022=755!)

其實加上遮罩的方式,是運算後的結果:
 
   defalut│ 0 │ 0 │ 1 │ 1 │
  --------│---│---│---│---│
    umask │ 0 │ 1 │ 0 │ 1 │
  --------│---│---│---│---│
     end  │ 0 │ 0 │ 1 │ 0 │

例:檔案=666、umask=022

  default  110(6) 110(6) 110(6)

  umask  000(0) 010(2) 010(2)
-----------------------------
  End   110    100    100  
  數值  4+2=6  4+0=4  4+0=4

不知道經過筆者冗長的解說之後,對於LINUX的檔案權限有沒有更瞭解一點(老實說!除非真的有需要的人才會來看吧!?),我知道對一般人來說這些真的太過生澀,但是...這就是LINUX的檔案權限

我在內文中,也有一些外部的連結,是原文的相關說明,有興趣的人也可參照一番!說不定我又有那兒寫錯了!還請大家不吝指教(最近寫啥都有點怕怕的...),謝謝!

2007年8月29日 星期三

LPI心得筆記簿 ─ 使用者管理(Manage Users)(2)

沒有留言:
筆者先前寫了有關於使用者管理(1)的心得筆記,現在來把一些比較特殊的用法也補上,雖然說這些用法不一定都用得著,可是多瞭解一點也沒有壞處,不是嗎?

更何況,有時候特別的用法在管理時,還是可以發揮出一定的功效...

雖然不太好上手,用久了還是可以讓這些成為技能中的一部份

其實,我在這裡也不是要介紹所有跟他們有關的參數,如果真的想要知道它相關的參數,可能利用man或help文件來查閱,可能會比筆者寫的詳細

useradd的其它參數:useradd [參數] username

常用的參數說明如下:

-g:設定gid(主要群組ID)
-G:增補群組ID(同時成為其它群組中的一員)
-s:設定shell(如bash...等)
-u:設定uid(使用者ID)
-d:設定使用者家目錄
-c:說明(跟/etc/passwd中的第五個欄位相同)
-e:帳戶到期日
-f:帳戶失效日

特殊用法-D(改變預設值)
說明:可以改變預設值的設定(之後新增的使用者皆套用此設定)
設定檔:/etc/default/useradd

useradd -D:查看現在的預設值(內容與/etc/default/useradd相同)
/etc/default/useradd 的內容如下
---------
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
---------

常用的參數說明:用法useradd -D [參數] username

-b:定義家目錄的前一個目錄
-s:往後加入的使用者使用的shell名稱(bash、nologin...)

這部份的附加設定是新增帳號時不增加對應的mailbox,就在此檔案中加入一條規則:CREATE_MAIL_SPOOL=no(預設的mailbox在/var/spool/mail)

gpasswd的用法(主要是用來設定群組密碼時使用)

用法:gpasswd [參數] (username) group

常用的參數說明如下:

-a:新增群組成員(例:gpasswd -a abc test --> 將abc加入test的群組中)
-d:移除群組成員(例:gpasswd -d 123 test --> 將123移出test的群組中)
-r:取消群組的密碼(一般在預設值中,不會特別加上密碼)
-R:禁止任何非群組成員利用newgroup做群組更換
  (例:gpasswd -R test ; 123$ newgroup test-->無法切換至test群組)

除了上述的常用參數與指令之外,其實也可以利用usermod來修改相關內容(用法:usermod [參數] username),其中的參數用法與useradd相同

例:usermod -s /sbin/nologin test(設定test的shell為/sbin/nologin)

然而,還有一些比較少用,或是特殊狀況下才應用得到的指令,例:pwconv、pwunconv、grpconv、grpunconv等(使用時機視狀況而定)

指令的意義如下:
pwconv/pwunconv:做passwd/shadow中的密碼欄互換
grpconv/grpunconv:做gpasswd/gshadow中的密碼欄互換

最後,筆者要提醒一下管理者/使用者在設定密碼時需注意的事項
1.密碼不該是身邊任何可見的字:很好猜...。
2.長度須足夠:Fedora有強制的長度限制為6個字元(root不在此限)。
3.組合不同類型的字元:英數+特殊符號(例:23^#xd@)。
4.不要用完整的英文字:可用字典檔破解法。
5.不要所有系統都用相同密碼:一破全開(這一點很難...唉)。
6.定期變更密碼:設定使用者密碼的到期日。
7.設定一個記得住的密碼:其實這一點會跟第5點矛盾。

其它的部份,還請各位Linux的愛好者補上吧!畢竟筆者一人能做的部份有限,如果有誤的部份,還請各位指正說明,謝謝!

2007年8月24日 星期五

LPI心得筆記簿 ─ 使用者管理(Manage Users)(1)

2 則留言:
我們都知道Linux是屬於可以單機多人多工的系統,也因為這點,經常被拿來做為Server使用,因為多人使用的關係,對於使用者管理就要更小心一些

而且,現在大多數的人都還是使用M$的系統,對於使用者的觀念有相當的差異,所以筆者才會在這篇說明(其實是之前上課的筆記心得,在此獻醜!),如有誤,還請指正

事先聲明:筆者使用的作業環境為Fedora6

首先,我們要先知道使用者/群組會存取的設定檔與資料庫

使用者資料庫:

/etc/passwd(內容如下,僅列兩組說明)

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

/etc/passwd格式說明:(以「:」做為分隔,共七項欄位)
root:x:0:0:root:/root:/bin/bash
 1 2 3 4 5   6   7

1.使用者名稱:(不可重覆)
2.密碼欄位:(加密於/etc/shadow),預設為x(空白:不用密碼;*:不可登入)
3.UserID(可重覆):從0開始,一般使用者從500開始,0~499留給系統使用
4.GroupID:位於群組資料庫的/etc/group中的GID
5.備註(Finger):也就是這個使用者的相關資料
6.使用者的家目錄:一般使用者預設在/home/"用戶名",root位於/root中
7.login shell:用戶登入時所使用的shell(可用chsh變更shell)
 (只讓使用者收發mail或不允許登入,將7欄位設 /bin/false或/sbin/nologin )

/etc/shadow(內容如下,僅列兩組說明)
root:$1$EIqku5bV$vYC9VA.NmFF47XXX2s.f448:13672:0:99999:7:::
bin:*:13672:0:99999:7:::

/etc/shadow格式說明:(以「:」做為分隔,共九項欄位)
root:$1$EIqku5bV$vYC9VA.NmFF47XXX2s.f448:13672:0:99999:7:::
 1         2          3  4  5 6 789
1.使用者名稱
2.密碼
3.密碼最後修改日(自1970/1/1至今的天數)
4.密碼最短可變更天數(預設為0)
5.密碼必須變更的天數(預設為99999-->不需變更)
6.密碼到期前幾天要通知(預設為7)
7.密碼失效期限(到期後,最多可用幾天)
8.帳戶失效日(自1970/1/1至今的天數)
9.空白(未來新增預留)

群組資料庫:

/etc/group(內容如下,僅列兩組說明)
root:::root
bin:::root,bin,daemon

/etc/group格式說明:(以「:」做為分隔,共四項欄位)
bin:::root,bin,daemon
1 23 4

1.群組名稱
2.群組密碼(/etc/gshadow):預設為x(空白:不用密碼;*:不可登入)
3.GroupID:又稱GID
4.屬於該群組的其它人:(預設是只有建立群組的人,可在此欄位加入其它人)

/etc/gshadow(內容如下,僅列兩組說明)
root:::root
bin:::root,bin,daemon

/etc/gshadow格式說明:(以「:」做為分隔,共四項欄位)
bin:::root,bin,daemon
1 2 3 4

1.群組名稱
2.群組密碼:預設為x(空白:不用密碼;!:不可登入)
3.群組管理者帳戶
4.屬於該群組的其它人:(預設是只有建立群組的人,可在此欄位加入其它人)

使用者的新增、刪除、修改分別用useradduserdelusermod,甚至透過vivim)修改設定檔都能達成;群組部份也雷同,只是把上述指令中的user改為group即可

除了這些基本的設定值外,還有很多相關設定與應用,筆者下次一併補上

最後,我還要說明一個重點,那就是useradd及userdel分別會完成那些事,瞭解整個流程後,對於新增和刪除使用者資料時,能夠具有更大的活用空間

useradd後,系統會做的事:
1.建立家目錄(/home),且權限為該使用者
2.將預設路徑(/etc/skel)下的檔案複製到使用者的家目錄資料夾內
3.將該使用者的資訊寫入/etc/passwd和/etc/shadow
4.建立與使用者名稱相同的群組,並寫入/etc/group和/etc/gshadow

userdel後,系統會做的事:
刪除使用者資料,但家目錄不會刪除,需刪除家目錄用 userdel -r username 即可

2007年7月17日 星期二

LPI心得筆記簿 ─ 工作排程(Cron)

沒有留言:
對於利用電腦處理一些例行性工作的人,這個功能一定要會使用,在Windows XP 當中可以利用控制台 --> 排定的工作,接著就只要跟著說明的引導來設計例行性工作的排程即可,如此一來就可以設定啟動時間、下次執行時間、執行結果...等說明

在Linux中當然也有類似的功能,那就是cron這支程式(服務)來控管,不過在Linux中要利用cron來編寫工作排程,最好是搭配Shell Script來使用,否則可能會有某些排程的指令會寫的很長一段,如果要偵錯的話,也比較不方便!

當然,在Windows中也是可以利用dos的語法來編寫一個可執行檔(*.exe、*.bat...等),再把這隻程式放入排程當中,一樣能夠達到預期的效果,只是對於使用上的嚴謹程度來說,Linux比Windows還多了許多的限制,當然也有他的強處

在進入cron之前,要先介紹兩個機制,其實他就類似最簡單的權限管制,代表誰能夠使用cron、或是誰不能使用cron這隻程式

除此之外,在Linux中相當重要的一點就是,所有規則描述都是由上往下,如果在上層已經通過該規則後,就不會再對下一層做判斷的動作,為什麼要特別聲明這一點呢?

因為除了cron本身之外,還有cron.allow(/etc/cron.allow)和cron.deny(/etc/cron.deny)這兩個設定檔來判斷誰能使用cron這隻程式,而判斷的順序如下:



假設,在cron.allow和cron.deny中都有使用者test的id,因為那是沒有意義的,在經過cron.allow之後,test就會被允許使用,而不會因為cron.deny也有test而無法使用,這是在Linux中常見的規則錯誤

接著,我們來看看如何使用cron這程式:

cron的設定檔:/etc/crontab(會多一個使用者欄位)
cron的暫存檔:/var/spool/cron
cron的使用指令
(1)編輯:crontab -e (crontab -u "username" -e:user的crontab)
(2)列出:crontab -l
(3)刪除:crontab -r(清空該使用者的所有cron排程)
cron的設定規則
(1)欄位說明:
   分 時 日 月 星期 command
   * * * * *(1~7) 語法編寫(*每單位時間都會執行)
(2)實例說明:
  1. 每一分鐘做echo的指令(echo a的結果導向至家目錄的testcron檔)
   * * * * * echo a >> ~/testcron
  2. 每天的00:00做tmp的備份(利用tar打包/tmp資料夾)
   0 0 * * * tar czrf etc.tgz /tmp
  3. 其它標示法:
   20 8,17 * * * command(每8、17:20分執行command)
   */10 * * * * command(每10分執行command)

以上就是cron的使用方式,至於要如何活用,取決於自己怎麼安排工作的排程,通常都會把時間點設定在較少人執行程式的時間(深夜時段)

筆者在Linux的異地備份(1)中使用crontab的時間點就是在深夜的00:00,而且筆者是把命令語法改為Shell Script的方式,未來要更改排程內容時就只需要更動該Script即可

筆者在此寫個小小的範例:(需注意sh的可執行權限)

backup.sh的內容:
#!/bin/bash
rsync -av /tmp root@192.168.1.99:/home/tmp/
rsync -av /home/test test@192.168.1.99:/home/test/

crontab -e的內容:
0 0 * * * /0000/backup.sh

2007年5月15日 星期二

LPI心得筆記簿 ─ 磁碟配額限制(QUOTA)

沒有留言:
什麼叫磁碟配額限制,在硬碟現在愈做愈大的時代(從GB級逼進到TB級),應該極少數人會開啟這功能,不過您如果是要拿來做FILE SERVER的話,如果不做限制的話,不是系統死給你看,就是跟你說磁碟不足,甚至有可能會造成資料上的毀損

磁碟配額其實M$或LINUX上都有,在XP-PRO上只要在磁碟區(C:、D:...)按個右鍵就有一個配額的選項可以設定,應該很少數人有設定,在LINUX上主要是有一個QUOTA的DAEMON在控制

在LINUX上的什麼部份最需要用到QUOTA的設定呢?其實就是/home和/var/spool/mail(不過真的要實行QUOTA時,硬碟規劃時將/home和/var/spool/mail切割成獨立的磁碟區),因為QUOTA只針對磁碟區,而不能針對單一目錄

磁碟配額限制的注意事項:
1.指定分割區掛載
2.初始化QUOTA的資料庫
3.編輯QUOTA設定
4.啟動QUOTA

1.在/etc/fstab中加入兩個quota
/dev/hda1   /    ext3  defaults,usrquota,grpquota 1 1
/dev/hda2   /home  ext3  defaults,usrquota,grpquota 1 2

2.重新掛載
#mount -a
#mount(確認是否正常掛載)
/dev/hda1 on / type ext3 (rw,usrquota,grpquota)
/dev/hda2 on / type ext3 (rw,usrquota,grpquota)

3.利用edquota編輯設定(/hda1有45GB、/hda2有95GB)
#edquota [-u|-g] (-使用者|-群組)載掛目錄
#edquota -g mis(mis群組的配額)
Disk quotas for group mis (gid xxx):
Filesystem  blocks  soft  hard  inodes  soft  hard
/dev/hda1   0  20000000 25000000  0    0   0
/dev/hda2   0  40000000 45000000  0    0   0

#edquota -g users(users群組的配額)
Disk quotas for group users (gid xxx):
Filesystem  blocks  soft  hard  inodes  soft  hard
/dev/hda1   0  10000000 15000000  0    0   0
/dev/hda2   0  40000000 45000000  0    0   0

4.啟動quota
#quotaon /(啟動/的磁碟配額限制)
#quotaon /home(啟動/home的磁碟配額限制)

這樣就可以針對這兩個載掛的磁碟區做磁碟配額限制,就不會爆滿了!

其它使用參數:
#edquota -t (設定default的彈性時間)
#edquota -T username(設定特定人的彈性時間)

2007年5月9日 星期三

LPI心得筆記簿 ─ 硬碟規劃(LVM)

沒有留言:
介紹完RAID之後,現在來說說預設會使用的硬碟規畫模式(LVM

什麼是LVM呢?

LVM(Logical Volume Manager):
原先運用於IBM AIX Unix系統,是一種分配硬碟空間到邏輯磁區的方法,這種方式比傳統Partition分配容易做容量調整,可動態放大檔案系統的機制,在說明之前要先解釋一些名詞

名詞解釋:
1. PV(Physical Vloume)實體磁區
Linux 中,可想成原先的一個partition就是一個PV

2. VG(Logical Volume Group)邏輯磁區群組
Linux中的視為一顆硬碟,但是實際上是由一個或多個Partition組成,也就是所VG是一個以上的PV所組成的群組

3. LV(Logical Volume)邏輯磁區
就是指在VG中每一個區塊的大小,就類似原先我們會把/HOME掛載在/HDAx,而利用LVM後,就是掛載在某個LV的區域

注意事項:
1. 無論那一個區域,都可做為PV
2. 指定好數個Partition為PV,再把數個PV架為一個VG,啟動成可用的空間,並分割所要的LV,但是大小不能超過VG的大小(就類似兒子的年紀比父親大= =+)
3.只有Boot Partition不設置為LVM

使用套件:
利用rpm來做檢查

#rpm -qa | grep lvm
如果有出現lvm2-x.xx.xx-x.x.x就代表已安裝(預設會有)

如果沒有再利用yum自行安裝
#yum -y install lvm

開始建立:
1. 已有三顆大小不同的實體硬碟的Partition(hda、hdb、hdc)

2. 指定分割區為PV
#pvcreate /dev/hda
#pvcreate /dev/hdb
#pvcreate /dev/hdc

#pvdisplay (可列出目前所指定的分割區)

3. 指定數個PV成為VG
#vgcreate vg0 /dev/hd[a-c](將hda、hdb、hdc的PV建為一個名為VG0的VG)

#vgdisplay (檢視目前VG的設定)

4. 啟動VG
#vgchange -a y vg0(啟動vg0為可用磁區,-a為active之意)

5. 建立LV的大小(以-L來指定大小,例1.5GB 為-L 1500)
#lvcreate -L 100000 vg0(建立VG0中的LV大小為100GB)
(+100為加大100MB、-100為縮小100MB、100為指定大小)

6. 會自動建立一個/dev/vg0的目錄,且目錄下會建立一個LogVo01的連結(LV),所要指定LV,使用-n即可
#lvcreate -L 1000 vg0 -n testlg1(指定vg0 中的中的testlg1的LV大小為1GB)

#lvdisplay vg0(檢視目前設定)
--Logical volume--
LV name /dev/vg0/LogVo01
....(略)
--Logical volume--
LV name /dev/vg0/testlg1

7.格式化及掛載
#mkfs -j /dev/vg0/testlg1
(以ext3格式化/dev/vg0/testlg1,原本mkfs是以ext2,加上-j為ext3)
#mkdir /mnt/test(在/mnt下建立test資料夾)
#mount /dev/vg0/testlg1 /mnt/test(掛載/dev/vg0/testlg1在/mnt/test下)

經過了以上的步驟,基本上就可使用了,但是如果不敷使用時,可以加入新的硬碟,也就是LVM最大的特性,可「動態」變動磁碟大小,建立方式如下:

加入一個實體的硬碟Partition(/dev/hdd)

1. 加入PV
#pvcreate /dev/hdd

2. 擴充VG
#vgextend vg0 /dev/hdd

3. 將原先掛載的vg0卸載
#umount /dev/vg0/testlg1

4. 擴充LV的大小(從原先的1GB擴充為2GB)
#lvextend -L 2000 /dev/vg0/testlg1

5. 磁碟檢查
#fsck -f /dev/vg0/testlg1(若為ext2則改用e2fsck)

6. 重新格式化
#resize2fs /dev/vg0/testlg1(因新增之磁碟區尚未格式化)

7. 重新掛載後即可使用(重開機)

ps:其實Linux中有個指令不需重開機,即可讓硬碟分割區及格式化直接生效(可以減少許多等待的時間),就是#partprobe

(筆者:雖然網路上有更多詳盡的文章,這是我的心得筆記,所以還是上來獻個醜,雖然已經有謎之聲說不需要寫這個了啦!= =+)

2007年5月7日 星期一

LPI心得筆記簿 ─ 硬碟規劃(RAID)

6 則留言:
今年一月,跑去上了某電腦補習班有關於LPI的認證課程,花了不少的銀子,所以只好乖乖的去上課(全勤,唸書有這麼乖就好),之後一直忙於轉換工作的事情,總是覺得沒時間複習,所以就上來跟大家一起分享上課的心得,同時也在這地方與大家做個交流吧!如果有所遺漏之處還請各位不吝指教

前言:

1. 其實在上LPI之前,有先安排關於網路概論的課程,這裡不加說明(跳線就是當時老師說不用教的地方= =+),不過這跟大學課程中機算機概論的部份有許多雷同之處(除了ROUTE TABLE之外),需要的人還是回去翻翻家中已蓋滿灰塵的機概吧!

2.說明一下上課時所用的系統,使用FEDORA6(那時剛出約一個多月吧!),雖然說只是LINUX的一個分支,不過因為使用者較多,且社群的資料較多,硬體部份就略過了(補習班的硬體能夠多好呢?唉...),現在還有一股熱潮的UBUNTU當然也不可小看(因為有金主支持總是比較有利),不過因為使用模組不同(不知這說法有無不當UBUNTU為Debian、FEDORA為 Redhat),真的有需要的也可以去參考一下

安裝:

在安裝之前要先介紹一下硬體的規畫,在剛開始上手時,可以用防呆的安裝法,全部下一步(同時關閉防火牆及SELINUX),如果是要在實務上應用的主機,就要動點頭腦規畫

硬碟規畫:首先要先有RAID或是LVM的規畫概念,這裡先介紹RAID

RAID(Redundant Array of Independent Disks,俗稱為磁碟陣列),level有分為RAID0~6七種類型,不過一般常見的應用仍只有RAID 0、1和5三種

舉例來說:如果我們要存一份資料,其中包括了A、B、C、D四個資料的組合

RAID 0:需二個硬碟
分別把A、B和C、D分別存在不同的PARTITION中,特性是速度快,但無安全性,因為資料是分存在兩個不同的磁碟中(如果兩個PARTITION是在同個硬體磁碟區中則無意義),所以可以增進存取速度,但是其中一個硬碟如果毀損就會造成該資料無法存取

RAID 1:最少需二個硬碟
分別把A、B、C、D存在兩個不同的PARTITION中,特性是安全性高,但速度慢,因為是將資料同步存在兩個不同硬碟當中,故所需時間較久,所以也不能夠把兩份資料存在同一個硬體磁碟中,不然硬體壞了,資料受損機率也極高

RAID 5:最少需三個硬碟
意思類似將A、B、C和B、C、D及A、C、D分別存在三個不同硬體磁碟區中,特性是速度比RAID 1快、安全性較RAID 0好,因為只要三個其中一個硬碟毀損,我們還是可以利用剩下兩個讀取到完整的資料,但是建構成本較高(硬碟多一個)

PS:當RAID1和5的其中一個硬碟毀損時,需要一個新的硬碟來做為備援(Hot Spare),這個備援的硬碟也可以在一開始時就加入mdadm在建立raid的架構中,所以在本文後段的範例中,筆者已經直接把備援的硬碟,在建立raid時就直接加入(即時性
的考量)

在linux中的製作模組為mdadm,當準備好四個相同大小的硬碟後,以
# rpm -qa | grep mdadm(以rpm方式查詢是否具有此套件)

無:mdadm
# yum -y install mdadm (利用線上更新yum來安裝此套件)

有:mdadm
# uname -r(確認kernel 2.4以上版本才支援RAID)

建立RAID的使用指令

建立RAID 0:
# mdadm -Cv -l 0 /dev/md0 -n 2 /dev/hdc {8,9}
-C是指建立
-v是指察看過程
-l是指建立的屬於level 0、1或5
/dec/md0是指在linux中建立的裝置名稱為RAID 0
-n 2是指幾個RAID裝置屬於建立好的RAID 0
/dev/hdc {8,9}是指建立在/dev/hdc8/dev/hdc9兩個partition上

可利用--detail參數來觀看建立好的RAID 0(1、5)的資訊
# mdadm --detail /dev/md0(md1、5)

其中有chunk-size是指寫進一個partition的大小 ,例如RAID 0中把一個file同時寫進兩個或以上partition時,會把file分成多大寫進其中一個partition(系統記錄在/proc/mdstat)

格式化:
# mke2fs -v -b 4096 -R stride=16 /dev/md0(md後為數字0)
(-R stride=n來增加效能,因為chunk-size=block*stride,因此對於RAID 0來說可以增加效能,對於其它RAID不一定能增加效能,例:RAID 1)

掛載並使用
# mkdir /mnt/md0(建立/mnt/md0資料夾)
# mount /dev/md0 /mnt/md0(掛載/dev/md0至/mnt/md0)

解除RAID裝置
# umount /dev/md0(卸載/dev/md0)
# mdadm -S /dev/md0(參數-S會直接解除 /dev/md0上的RAID 0)

寫入/etc/fstab(開機時會載入的硬體設定檔)
# vi /etc/fstab(以vi編輯/etc/fstab設定檔)

最後一行加入
/dev/md0 /mnt/md0 ext2 default 1 2

(fstab欄位說明)
第一欄 實際的 device 名稱。
第二欄 對應到的目錄結構(mount point)。
第三欄 該分割區的檔案系統ext、ext2、msdos、iso9660、nfs、swap。
第四欄 在 mount 時的參數。
第五欄 在使用 dump 時是否記錄,不需要則輸入0。
第六欄 決定在開機時執行 fsck 的先後順序。

建立RAID 1(建立流程,並參考RAID 0之說明)
#mdadm -Cv --level=1 /dev/md0 -n 2 /dev/hdc8 /dev/hdc9 -x1 /dev/hdc10
-x:指定備用的硬碟,當其中一個毀損時會自動備援)
# mke2fs -j /dev/md0
# mount /dev/md0 /mnt/md0
# cp -a /bin /mnt/md0(copy /bin中的資料做測試)
# mdadm /dev/md0 -f /dev/hdc9 (測試/dev/hdc9壞掉時)
# mdadm -D /dev/md0

恢復/dev/hdc9
# mdadm /dev/md0 --remove /dev/hdc9
# mdadm /dev/md0 --add /dev/hdc9

建立RAID 5(建立流程,並參考RAID 0之說明)
# mdadm -C -l 5 /dev/md0 -n 3 /dev/hdc{8,9,10} -x 1 /dev/hdc11
(可加入-c128的參數,代表chunk-size為128)

這些就大略是RAID在Linux(Fedora)中的實作,如有興趣也可以自己實作一下,當然不用真的準備這麼多實體硬碟,可以在同個硬碟中割出4個相同大小的PARTITION來測試,等真的有這麼多實體硬碟時才能派上用場

不過這種軟體的RAID,效能上一定比不上動輒數萬元的硬體RAID備援來得高,但是對於小市民來說,也無非是種資料備援的手段之一(也要看是那種重要資料啦!)

PS:發現隨便整理一小點筆記就可以寫出來一堆,真害怕後面的路...