檔案系統、主機用途與硬碟規劃

檔案系統、主機用途與硬碟規劃

大綱

前言

在 Linux 系統上所有的東西都是以檔案的方式在處理的,各種檔案儲存在系統 根目錄 / 之下的階層式目錄架構中,在整個檔案系統上有各式各樣不同的檔案類型,除了我們熟知的一般檔案與目錄之外,還有連結檔、socket、管線檔(pipe)、硬體設備檔等各種軟硬體的資源。另外,Linux 檔案附檔名是沒有意義的, xxx.txt xxx.exe 都可能是文字檔或執行檔,檔案名稱是區分大小寫的,例如 sample.txt 和 Sample.txt 是不一樣的。

一般檔案與目錄

一般檔案是最常見的檔案類型,包含文字檔、二進位檔、圖片檔、影片檔、壓縮檔等等,這些都是屬於一般檔案的類型。

而大家所熟知的目錄在 Linux 中也是一種特別的檔案,其作用就是用來放置別的檔案或目錄,架構出整個檔案系統的目錄結構。

一般檔案在 ls -l 的輸出中,是以 - 表示,而目錄的話則是以 d 表示:

ls -l /etc/

Block 設備檔案

block 設備檔案是用來存取硬體設備的媒介,它的特性跟一般的檔案差不多,具有記憶體緩衝區的功能,可以將一個區塊的資料放在快取記憶體中進行存取,最後以整個資料區塊的方式寫入硬體設備中,所以稱為 block 設備檔案。

block 設備檔案通常也都是可查找的(seekable),也就是可以存取其中任意的位置的資料。

在 /dev 中的硬碟與記憶卡就是最典型的 block 設備檔案:

ls -l /dev/sd*    # 硬碟、隨身碟
ls -l /dev/mmc*   # 記憶卡
block 設備檔案

在使用 dd 指令將 ISO 檔製作成 Live USB 隨身碟時,就會使用到 block 設備檔案,另外若要清空硬碟、隨身碟或記憶卡時,也可以使用 dd 來處理,例如使用 0x00 清空整個硬碟:

dd if=/dev/zero of=/dev/sdb bs=4096

或是使用亂數填滿整個硬碟,以達到資料銷毀的目的:

dd if=/dev/urandom of=/dev/sdb bs=4096

Character 設備檔案

character 設備檔案也是一種用來存取硬體設備的媒介,不過它的特性與 block 設備檔案不太一樣,character 設備檔案比較類似管線(pipe)或序列埠(serial port)的概念,資料的輸入與輸出都是立即性的,沒有緩衝區,這種設備檔案在處理資料時都是一個字元接著一個字元依序處理的,所以稱為 character 設備檔案。

設備對於資料的處理方式是由其對應的驅動程式所負責,寫入資料至不同設備,會有不同的功用,例如讓喇叭產生聲音、輸出訊息至螢幕或序列埠;從設備讀取資料也有各種不同的情況,例如產生亂數等。

在 /dev 中的設備檔案大多是都是屬於 character 設備檔案:

ls -l /dev/
character 設備檔案

這是從 /dev/urandom 這個 character 設備檔案讀取亂數資料的例子:

head -c16 /dev/urandom | od -A x -t x1z -v

我們從 /dev/urandom 讀取 16 個 bytes 的資料,再導向給 od 輸出:

從 /dev/urandom 讀取資料

/dev/zero 也是一個 character 設備檔案,而從其中讀取出來的資料都會是 0x00

head -c32 /dev/zero | od -A x -t x1z -v

連結檔案

連結檔案就是指向其他檔案或目錄的連結,這種檔案類型在系統上也是很常見的。

ls -l /etc/rc5.d

連結檔案對於一般使用者來說也是很常用的,以下是建立連結檔案的指令:

ln -s target link_name

這樣就會建立一個 link_name 連結檔案,而其內容就是指向 target 這個檔案。

Pipe 管線檔案

pipe 管線檔案就是一種讓兩個行程(process)之間可以傳遞資料的媒介,其特性就跟 Unix 的管線(pipe)相同,從一個行程讀取資料之後,再把資料傳送給另外一個行程,只不過它是以有名稱的檔案來提供資料導向的功能。

我們以一個最簡單的範例來說明 pipe 管線檔案如何使用,首先來看一個普通的管線範例,這裡我們將 date 的輸出透過管線導向至 cat,然後輸出至標準輸出:

date | cat

接著我們將是範利用 pipe 管線檔案來達到相同的效果,首先使用 mkfifo 建立一個 pipe 管線檔案

mkfifo mypipe
ls -l mypipe

有了 pipe 管線檔案之後,我們可以將 date 的輸出導入這個 pipe 管線檔案:

date > mypipe

這時候資料會被儲存至 pipe 管線檔案的緩衝區中,等待後續的行程來讀取它。

接著我們再使用 cat 將這個 pipe 管線檔案中資料讀取出來,並且輸出:

cat mypipe

這樣的效果就等同於一般的 Unix 管線,不過在程式設計上使用 pipe 管線檔案會比較方便,可讓不同的程式直接以檔案的形式互相傳遞資料。

Socket 檔案

socket 檔案也是用於不同行程之間溝通用的媒介,特別是在網路服務的應用上特別常見,可提供不同主機之間互相溝通的管道,而這種檔案類型絕大部分都是在程式設計時才會有機會使用到。

在 Linux 伺服器上的 /run/ 目錄中通常會有一些 socket 檔案:

ls -l /run/*sock*

在開發網路通訊相關的程式時,就很常會需要建立 socket 檔案,以 C 語言來說就是使用 socket 這個函數:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
在建立好 socket 檔案之後,所有的網路資料傳輸就可以仿照存取檔案的方式處理,這部份可以參考網路上 Linux 的 socket 程式設計範例。

主機用途與服務

主機準備三台

  • 營運主機
  • 備份主機
  • 筆電主機

各硬體裝置在 Linux 中的代號

在 Linux 系統當中,每個裝置都被當成一個檔案來對待!
  • IDE 硬碟機 : /dev/hd[a-d]
  • SCSI 硬碟機 : /dev/sd[a-p]
  • USB 隨身碟 : /dev/sd[a-p](與 SCSI 硬碟一樣)
  • CDROM  :  /dev/cdrom
  • 軟碟機 :  /dev/fd[0-1]
  • 印表機 :  /dev/lp[0-2]
  • 滑鼠 :  /dev/mouse
  • 磁帶機 :  /dev/ht0 (IDE)或/dev/st0 (SCSI 介面)

主機用途與服務

  • Linux 與 Window 共存: LILO 與 Grub;
  • NAT(Network Address Transfer) : 類似 IP 分享器的功能。當內部電腦要連接上 Internet 時,需要通過 NAT 的技術,將你內部電腦的資料封包中,關於 IP 的設定都設定成 NAT 主機的公共 IP ,然後才傳送出去 Internet ,如此一來,你的內部電腦雖然是使用私有 IP ,但是在連線上 Internet 時,就可以透過 NAT 主機的 NAT 技術,將 IP 來源給改了改!哈哈!如此一來,就可以向 Internet 要求資料囉!
  • SAMBA (類似網路上的芳鄰功能) : 在 Windows 裡面可以很輕易的就以『網路上的芳鄰』來分享彼此的檔案資料,那麼 Linux 要如何與 Windows 分享呢?呵呵!使用 SAMBA 就可以啦! 這也是最普遍的 file server (檔案伺服器)。 由於分享的資料量可能較大,那麼對於系統的網路卡與硬碟的大小及速度就比較重要, 如果您針對不同的使用者提供檔案伺服器功能,那麼 /home 可以考慮獨立出來,並且加大容量。
  • Mail (郵件伺服器): Linux 一安裝完畢就已經提供了 Sendmail 或 Postfix 的郵件服務! 由於我們如果向外面的公司申請免費的 E-Mail 信箱,了不起容量大致上到 20 MB , 但是,要知道有時候我們一不小心就會讓郵件容量超過了 20 MB,這樣一來,呵呵,您的免費信箱就爆了!真抱歉....但是,如果你自己架設一個 mail server 呢?哈哈!哪麼你的信箱就可以到達幾 GB 這麼大!很過癮吧!在 mail server 上面,重要的也是硬碟容量與網路卡速度,在此情境中,也可以將 /var 獨立出來,並加大容量。
  • Web (WWW 伺服器):WWW 幾乎是每個主機上面都會安裝的一個套件了!當然,要推銷你自己的話,那麼 WWW 伺服器是絕對不會被你忘掉的!在 Web server 上面,CPU 的等級有時候不能太低,而最重要的則是 RAM 了!要增加 WWW 系統的穩定度,提升 RAM 是一個不錯的考量。
  • DHCP ( Dynamic Host Configuration Protocol ) (提供自動取得 IP 的功能): NAT 搞定之後,要曉得的是,你的 Client (用戶端)每一部都需要經過設定才能上網 ( 剛剛提到的私有 IP 的概念! ) !好麻煩!那麼使用 DHCP 就可以改善這個問題囉! Client 端都不必設定任何咚咚,馬上將可以上網了!快樂吧! 這個咚咚的硬體要求可以不必很高囉。
  • Proxy (代理伺服器): 這也是常常會安裝的一個伺服器軟體,尤其像中小學校的頻寬較不足的環境下, Proxy 將可有效的解決頻寬不足的問題!當然,你也可以在家裡內部安裝一個 Proxy 喔!但是,這個伺服器的硬體要求可以說是相對而言最高的,他不但需要較強有力的 CPU 來運作,對於硬碟的速度與容量要求也很高! 自然,既然提供了網路服務,網路卡則是重要的一環!
  • FTP是File Transfer Protocol(文件傳輸協議):  架設 FTP 實在是一件不智的事情!因為對你的頻寬影響太大了!  相當不建議架設 FTP 的啦!尤其安全性上面也很傷腦筋! 對於 FTP 則是您的硬碟容量與網路卡好壞相關性較高。
  • DNS伺服器 : 網域名稱系統(Domain Name System),功能就像戶政系統,看就知道不需要很有效率(公家機構嘛)需要硬體不會很高,但就是手續複雜,啊哈。

Linux 檔案系統的規劃

Linux系統分割區最少要包括  /  和  swap(虛擬記憶體)兩個。 以下是幾個考量的重點:

資料的安全性

若硬碟切割為不同區域,當某區塊發生問題不會影響其他區塊。

資料分類

將靜態與動態資料(例如:/var , /var/log, /var/spool/mail,  /home )分開,以避免檔案過滿影響到其他系統執行。

不同檔案系統類型

  • /boot 包含了作業系統的核心和在啟動系統過程中所要用到的檔案
  • swap►虛擬記憶體
  • / ►根目錄 ,  /var ►主要放置系統執行過程中經常變化的檔案
  • /home使用者的home目錄所在地

Linux各個分割區的作用

  • / 根目錄►建議在根目錄下面只有目錄,不要直接有檔案。
  • swap相當於Windows上的虛擬記憶體。
  • /boot 包含了作業系統的核心和在啟動系統過程中所要用到的檔案,建這個分割區是有必要的,因為目前大多數的PC機要受到BIOS的限制, 況且如果有了一個單獨的/boot啟動分割區,即使主要的根分割區出現了問題,計算機依然能夠啟動。這個分割區的大小約在60MB—120MB之間。
  • /bin►bin 是binary縮寫,主要放置一般使用者可以操作的指令程式。
  • /etc 系統主要的設定檔案幾乎都放在這個目錄內。
  • /dev裝置檔案,在Linux系統上,任何裝置都以檔案型別存放在這個目錄中,如硬碟裝置檔案,軟碟機、光碟機裝置檔案等。
  • /lib , /lib64主要為系統函式庫和核心函式庫,若是 64 位元則放在 /lib64。連結到 /usr/lib, /usr/lib64。
  • /home使用者的home目錄所在地,這個分割區的大小取決於有多少使用者。如果是多使用者共同使用一台電腦的話,這個分割區是完全有必要的,況且根使用者也可以很好地控制普通使用者使用計算機,如對使用者或者使用者組實行硬碟限量使用,限制普通使用者存取哪些檔案等。
  • /media, /mnt mnt是mount的縮寫。/media 放置隨插即用的裝置慣用目錄,/mnt 為管理員/使用者手動掛上(mount)的目錄。
  • /root為系統管理者的家目錄。
  • /opt 全名為 optional,通常為第三方廠商放置軟體處,不過我們還是習慣放在/usr/local下。
  • /sbin►必要的系統執行檔。放置系統管理員可以操作的指令。連結到 /usr/bin,/usr/sbin。
  • /tmp►存放暫存檔。這對於多使用者系統或者網路伺服器來說是有必要的。這樣即使程式執行時生成大量的臨時檔案,或者使用者對系統進行了錯誤的操作,檔案系統的其它部分仍然是安全的。因為檔案系統的這一部分仍然還承受著讀寫操作,所以它通常會比其它的部分更快地發生問題。這個目錄是任何人都能存取的,所以需要定期清理。
  • /usr  /usr 全名為 unix software resource 縮寫,放置使用者使用的系統指令和應用程式、服務(注意不是 user 的縮寫喔!),需要較大空間分給它
  • /usr/bin 
  • /usr/local/bin 
  • /usr/lib
  • /usr/local/lib
  • /var 主要放置系統執行過程中經常變化的檔案,例如快取(cache)或者是隨時更改的登入檔案(log file)。
  • /var/log 系統紀錄檔記錄分割區,如果設立了這一單獨的分割區,這樣即使系統的紀錄檔檔案出現了問題,它們也不會影響到作業系統的主分割區。
  • /var/spool/mail郵件檔。
  • /proc : 此目錄資訊是在記憶體中由系統自行產生的,儲存了一些當前的進程ID號和CPU、記憶體的對映等,因為這個目錄下的資料都在記憶體中,所以本身不佔任何硬碟空間。
  • /sys :  與 /proc 類似,但主要針對硬體相關參數。
  • /run : 系統進行服務軟體運作管理處。
  • /srv :  一些服務啟動之後,這些服務所需要存取的資料目錄,如WWW伺服器需要的網頁資料就可以放在/srv/www中。
  • /lost+found   該目錄在大多數情況下都是空的,但當實然停電或者非正常關機後,有些檔案臨時存入在此。

主機硬碟分割

Linux 每個目錄存放不同用途的檔案

在還沒確定主機用途時可只切割

  • /
  • /home
  • swap

一般個人使用桌機

  • /
  • /boot
  • /usr
  • /var
  • /home
  • /backup
  • swap

Mial server

  • /
  • /boot
  • /usr
  • /var
  • /var/spool (mail 放在 /var/spool/mail)
  • /home
  • /backup
  • swap

Web server

  • /
  • /boot
  • /usr
  • /var
  • /home (加大空間)
  • /backup
  • swap
掛載目錄之空間,與主機用途有關。例如:規劃為 Mail server 則 /var/spool 空間要大。


參考資料

特色、摘要,Feature、Summary:

  • 環境安裝、設定與更新 - 相關文章

關鍵字、標籤,Keyword、Tag:

  • Linux,Ubuntu,Server

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組