跳到主要內容

Linux 操作不求人系列 - 參章之參 - 系統管理(III) - 新增各式磁碟機

@ Driving External Hard Disk or Flash Disk
      一般來說,我們時常會在 Linux 工作站,用到外接硬碟、隨身碟的拔插,來交換資料使用,以及為了保持 24 小時的不關機,通常會裝設 UPS 來防止斷電並監控之,故筆者就先來說明這些常用的磁碟掛載與卸載方式。首先,要掛載外接硬碟或是隨身碟,要先考慮要使用著檔案系統格式,一般在CentOS6_x64下,核心預設只支援 ext ,vfat (fat系列,https://en.wikipedia.org/wiki/File_Allocation_Table),btrfs,xfs 等檔案系統,若我們要使用 Microsoft 的 NTFS 格式,與現今隨身碟與記憶卡所普遍使用的 exfat 格式,則需先下載套件(RPM,https://en.wikipedia.org/wiki/RPM_Package_Manager)來擴充,至於 CentOS_x64 可以用來擴充的套件庫,可以從CentOS網站得知 https://wiki.centos.org/AdditionalResources/Repositories。如常用的 EPEL (https://fedoraproject.org/wiki/EPEL),而套件下載的方式,分為直接利用指令 yum 下載 ,或是從筆者常用的網站 RPM search(http://rpm.pbone.net/)或 RPM find(http://www.rpmfind.net)下載,再利用指令 rpm -ivh 來安裝。
     首先我們先來說明,下載可讀寫 Microsoft 的 NTFS 格式的套件,ntfs-3g。我們先轉為 root 帳號,並執行指令 yum repolist 來看預設的 Repository 資料庫有哪些(圖3-25)。


































(圖3-25)

    圖3-25第1個指令為利用指令 yum repolist,來列出現有的套件庫,與其中包含的套件數目,如黃框處。第2個指令為利用指令 yum install epel-release-6  /* install 後方接上要安裝套件的關鍵字或全名,來安裝 CentOS6 版的套件庫 */ ,指令 yum 的詳細參數,讀者可參考 man yum。再來看到它搜尋到相關的套件後,若確認要安裝,則按下鍵盤 y 鍵再按鍵盤 Enter 鍵,接著會有 Importing GPG Key 的訊息(https://www.centos.org/keys/,GPG設計目的為何,可參考https://en.wikipedia.org/wiki/GNU_Privacy_Guard ),一樣按下 y 鍵再 Enter鍵 ( 就頭都抹洗髮精了,可以不沖水嗎?若讀者懶得確認,往後可在 yum 後面加上 -y 參數即可 )(圖3-26),即可開始下載並安裝。安裝完後,使用指令 yum repolist 查詢會出現如圖3-27畫面,可看到黃框處,顯示已經裝上了 epel repository。
     使用 yum 的好處,就是它會檢查有相依性的套件(Dependency),而幫您找齊,再安裝入系統內,但也並非每次都很完整,有時候不同 Repository 套件間的相依性,也會有互相不相容的情形發生,故有些高手高手高高手,就覺得 Debian Linux 系列的 apt 是比較優良的套件安裝模組。但筆者自身認為,習慣就好,User eXperience (UX) 很重要,畢竟智慧就是經驗的累積。除此之外,若我們要移除套件,則使用 yum remove ,更新套件則換成  yum update。還可以利用指令 yum --disablerepo=* --enablerepo=epel install ,來暫時僅安裝使用 epel 套件資料庫的套件。還有其他參數與用法,有興趣的讀者請自行 man yum




















(圖3-26)




















(圖3-27)

    緊接著要安裝 ntfs-3g 模組,我們使用指令 yum install ntfs-3g ntfsprogs,來下載所有相關檔案,如圖3-28,接著按下鍵盤 y 鍵,與再一次的GPG安裝確認,再按下鍵盤 y 鍵,及安裝完成(圖3-29)。
































(圖3-28)

















(圖3-29)

    一般來說 ntfs-3g.x86_64 套件,為包含磁碟格式的讀寫驅動程式與說明文件,ntfsprogs.x86_64為搭配ntfs檔案格式的工具程式,可能用來掃描磁碟狀況或是簡易的修復磁碟與檔案結構,如同 MS Windows 下的 chkdsk 程式。這時,我們可以利用指令 which ntfs-3g,可知 ntfs-3g 指令置於 /bin/ntfs-3g,再利用 ls -l /bin/ntfs* (圖3-30),來看看有那些跟 ntfs 有關的工具程式。除此之外,讀者亦可以利用指令 updatedb 先建立系統內所有檔案的搜尋索引(執行會花一些時間),再利用 locate ntfs,來搜尋出系統內,所有檔名有關於 ntfs 字串的檔案。

















(圖3-30)

     接下來,我們遇到新的指令,先利用 man ntfs-3g 大致看一下使用重點,並學習所指示的方式來 mount 我們的外接 NTFS 格式之磁碟。一般來說,安裝好後,插入 NTFS 格式的外接隨身碟,GNOME就會彈出磁碟內容的視窗,並在桌面出現 icon ,但我們還是要說明在文字介面下的操作,Terminal 操作的優點已在前幾章敘述,首先在 Terminal 輸入如以下指令:
$  fdisk  -l    /* 圖3-31,因容量2T以下之磁碟,通常設為 MBR 配置方式(https://en.wikipedia.org/wiki/Master_boot_record) 並相對於超過容量 2T之硬碟,便要設定成 GPT(https://en.wikipedia.org/wiki/GUID_Partition_Table) 配置方式,其工具為 parted(此環境下利用指令 mklabel  gpt )圖形化工具 gparted(可透過yum安裝),亦可用指令 yum install gdisk 安裝 gdisk 工具程式,來相對處理  GPT 配置的磁碟。 */
























(圖3-31)
    從圖3-31黃框處,可以看到筆者接上第二顆磁碟,系統認定為 /dev/sdb,容量為1000.2 GB,約 1TB,因磁碟內已經有分割,且總共僅有一個磁碟分割,故黃框下方顯示 /dev/sdb1。黃框下右,則顯示磁碟分割格式為 HPFS / NTFS (既然是 Microsoft 發展的,我們就來參考 Microsoft 的說明網頁https://support.microsoft.com/en-us/kb/100108)。
接下來,在手動掛內外接磁碟前,我們必須指定一個欲掛載的資料夾,一般外接磁碟皆掛載到 /media 或 /mnt 路徑下,使用者自取名稱的資料夾,但筆者認為,老話一句 (您送丟後,修妹掛對丟掛對),習慣才是王道。為了說明,筆者先利用指令如以下,來掛載上外接1TB的硬碟:
$ mkdir  /media/usbdisk1T                        #  先創造一個資料夾在 /media/usbdisk1T
$ ntfs-3g  /dev/sdb1  /media/usbdisk1T    /*  將 /dev/sdb1 掛在  /media/usbdisk1T ,成為其內容。或可使用指令 mount -t  ntfs-3g  /dev/sdb1  /media/usbdisk1T */
$ df -h                  /*  利用指令 df 來列出是否掛載有成功與磁碟可使用空間,參數-h為空間大小以人看得懂的方式表示,前面篇章有說明,亦可加上參數 -T 來順便列出檔案系統格式。 */
-------------------------------------------------------------
$ umount /media/usbdisk1T             /*  不想使用需卸載,使用指令umount,路徑不想打太多字或忘記全名,記得可用鍵盤 Tab鍵來補齊阿  */
------------------------------------------------------------

     那近年最流行的記憶卡,隨身碟的 exfat 格式呢?我們亦可透過類似方式,下載 exfat 驅動與工具,但此次筆者要介紹從網站下載驅動並安裝。首先,我們先進入RPM Search網站 http://rpm.pbone.net/,我們在Search的條件,分次打上我們要下載的工具程式 fuse-exfat exfat-utils ,如圖3-32至圖3-35。下載 fuse-exfat-1.0.1-2.el6.x86_64.rpmexfat-utils-1.0.1-2.el6.x86_64

















(圖3-32)

















(圖3-33)















(圖3-34)




















(圖3-35)


     我們利用 firefox 瀏覽器下載  fuse-exfat-1.0.1-2.el6.x86_64.rpm 與 exfat-utils-1.0.1-2.el6.x86_64 rpm套件檔至 ~/Download 內後,便利用指令 rpm -ivh  後面接上要安裝的 rpm 套件檔案(https://en.wikipedia.org/wiki/RPM_Package_Manager),參數 -i 為 install,-v 為 verbose info. 會將安裝訊息印出,-h 為 hash marks,通常搭配參數 -v 使用最佳。如圖3-36第3個指令,便可安裝,若有發現其它套件相依性問題,利用指令 rpm 安裝,亦會出現相依問題的何種錯誤來指引安裝使用。











(圖3-36)

     接下來,掛載亦如NTFS,在GNOME環境下,會自動彈出exfat格式的磁碟。Terminal 掛載步驟,就如同 NTFS的操作,僅把 mount 的參數 -t 後方的格式,改為 exfat,如下:
$  mkdir  /media/usb64G                                 #   先創造一個要掛載的資料夾
$  mount -t exfat /dev/sdb1 /media/usb64G   #   假設硬碟抓取到 /dev/sdb1
--------------------------------------
$  umount  /media/usb64G                              #  卸載亦利用 umount
---------------------------------------------------------------------------
除上述方法外,亦可以透過 rpmfusion 套件資料庫(http://rpmfusion.org/)來下載 rpmfusion套件庫當成 yum repository,如下:
$ wget  http://download1.rpmfusion.org/free/el/updates/6/x86_64/rpmfusion-free-release-6-1.noarch.rpm
/* 指令 wget 為 CentOS6_x64 下一個超強的檔案下載工作,筆者有機會會於後面篇章深入介紹,其與網頁下載工具 Curl 齊名。 */

$ wget http://download1.rpmfusion.org/nonfree/el/updates/6/x86_64/rpmfusion-nonfree-\ release-6-1.noarch.rpm
/* \ 為表示兩行字串要接在一起,兩次wget下載後,如圖 3-37 */

$ rpm -ivh fusion-free-release-6-1.noarch.rpm fusion-nonfree-release-6-1.noarch.rpm

$ yum install fuse-exfat exfat-utils    # 有安裝 rpmfusion套件庫後,就找的到 exfat 需要的套件



















(圖3-37)

----------------------------------------------------------------------------------------------------
以上磁碟格式為在 MS Windows的環境下支援較完整,故筆者建議格式化需在 MS Windows 環境下製作千千萬萬不要利用 Linux下的磁碟格式化指令 mkfs -t,來製作 NTFS exfat 格式,以防止資料發生不明的錯誤,來造成遺失。

     緊接著我們就要來分割與建立 Linux 下專用的格式 ext,Linux下亦原生支援使用 SGI 提供的 xfs 格式(http://oss.sgi.com/projects/xfs/),xfs 此格式在 CentOS7_x64,已經設定為檔案系統格式預設值了。因筆者現在手邊沒有容量超過2TB的外接硬碟式在閒置中,故以外接隨身碟先介紹容量小於 2TB 的格式化與掛載方式,假設有一外接磁碟,且尚未做磁碟分割與格式化,要注意插入時,是否已被系統自動掛載,若以掛載,要先用指令 umount 卸載磁碟後,再使用 fdisk做分割設定。系統抓取裝置位置為 /dev/sdb,則我們利用指令 fdisk /dev/sdb,如圖3-38
































(圖3-38)

     圖3-38在 fdisk 的環境下,利用鍵盤 m鍵,可以列出操作功能。接著利用鍵盤 n鍵,來新增一個磁碟分割區(文章往後簡稱 partition),在此例,筆者僅需要一個partition,且單純存放資料,並無開機等需求,故,建議直接選 p (primary partition)(圖3-39),如圖3-39綠框的位置,按下鍵盤鍵,接著 Partition number 指定為 1,再來 First cylinder 與 Last Cylinder 便使用預設值,如此便是該唯一之磁碟分割容量,使用到硬碟最大量。最後再按下 鍵盤 w 鍵儲存設定,並按下鍵盤 q 鍵離開位置(圖3-40)

































(圖3-39)













(圖3-40)

     設定完磁碟分割後,我們要將此唯一分割做格式化(format),在Linux下可使用指定 mkfs -t (type),如以下(圖3-41):

$ mkfs -t ext4 /dev/sdb1   # 指定格式化為 ext4 格式(https://en.wikipedia.org/wiki/Ext4)

     上述的 ext4 檔案系統,僅允許在MAC OSX 與 Linux 下來能讀寫,若僅要在 MS Windows下唯讀,則需另安裝套件 DiskInternal Linux Reader ( http://www.diskinternals.com/linux-reader/),若想試著讀寫 ext 檔案系統,可另外安裝 Ext2Fsd( http://www.ext2fsd.com/ ),但筆者強烈建議,盡量不要在  MS Windows 做寫入 ext 檔案系統的動作,以免發生不明的錯誤,造成資料遺失。如若要使用MS Windows 與 MAC OSX 與 Linux 下皆可讀寫的格式,建議可使用 vfat 格式。如以下指令:

$ mkfs -t  vfat  /dev/sdb1   # 參數 -t (type) ,換為 vfat,若是想用 xfs 格式,請換成 xfs

-----------------------------------------------------------------------------------------------------
格式化完成後,再記得要用 mount 掛載至您喜歡的資料夾路徑即可,如本節前例。
























(圖3-41)

     接著我們假設磁碟 /dev/sdb 容量超過 2TB(但筆者現僅有16G的外接磁碟可供說明),我們便需利用指令 parted /dev/sdb,來將磁碟換成 GPT 的 Label 設置,如下:


































(圖3-42)

     圖3-42利用 parted /dev/sdb 進入 parted 的環境,先輸入 help 來印出有哪些 parted 指令可運用。首先在 parted 環境下,先利用 print ,印出磁碟的最大最小可使用空間,我們必須利用 mklabel gpt 來將磁碟轉成 GPT 設置。接著,再利用 mkpart 來逐一設定所要分割的磁碟,如圖3-43內,Partition name 為自取名稱,也可打上 primary 以示辨別。 File system type 為使用預設 ext2 ( 指定為 Linux 預設ext 檔案系統格式),直接按鍵盤 Enter鍵即可。Start為設定起頭的位置,一般從頭分割,則設定 1。End 為設定最後分割的大小,因我們僅需一個分割,故設定到磁碟最大容量,用 print 所列印出的磁碟最大容量為 15.8G( 因筆者尚未有容量 2TB 硬碟可供試驗,故先用小磁碟試驗給讀者了解),設定完後,在使用 quit q 離開 parted 環境,此時磁碟的分割與標籤狀態已經變更,如圖3-43。接下來,在利用指令 mkfs -t ext4 /dev/sdb1 ,來格式化剛剛切割出的磁碟空間即可,要使用此空間,也如前段所述,要用 mount 掛載至一個資料夾下,筆者不在贅述。




























(圖3-43)

     格式化成 ext4 檔案系統的磁碟,之後便可使用 e2progs 工具程式,如指令 e2fsck /dev/sdb1,可對磁碟 /dev/sdb1 做底層掃描,並自我修復。 格式化成 xfs 檔案系統的磁碟,則需搭配的 xfsprogs工具程式,但通常要先利用 yum install xfsprogs 下載安裝。安裝後,便可利用指令 xfs_check /dev/sdb1 ,為假設對 xfs 格式的 /dev/sdb1 做掃描錯誤,再利用指令 xfs_repair /dev/sdb1,來做對 xfs 格式的 /dev/sdb1 的修復。詳細操作說明,筆者會在後面篇章討論,在此先給各位讀者建立一個概念。
    最後,在很快的介紹掛載幾個常用的網路硬碟格式,如現在最夯的NAS(Network Attached Storage),若有開放 MS Window 常用的晚路翻林(網路芳鄰)方式分享磁碟,或 Linux 常用的 NFS( https://en.wikipedia.org/wiki/Network_File_System ) 方式分享,那在 CentOS6_x64下要如何掛載並掛好掛滿?掛載網路芳鄰硬碟可利用以下指令:

$ mount -t cifs -o username=diskuser,password=diskpass   //192.168.100.10/sharesmbdisk  \ /mnt/smbdisk 
/*  因指令太長,故利用 \ 表示為接續在同一個指令,在此先說明。指令 mount 加參數 -t 為格式,住要此格式為 CIFS (https://en.wikipedia.org/wiki/Server_Message_Block)或稱 SMB,參數
-o 為其他選項,因此網路磁碟格式通常會設定帳號密碼分享,故在此參數選項內加入username與password。接著給 //192.168.100.10/sharesmbdisk 為欲分享主機(來源)給的 IP位址與分享的資料夾名稱,後面在接上要掛載的目標資料夾,筆者將其掛載到 /mnt/smbdisk,若無此資料夾路徑,要先新增資料夾  */
若要掛載 NFS 硬碟,則可利用以下指令:

$ mount -t nfs   //192.168.100.10/sharenfsdisk   /mnt/nfsdisk 
/* 如同前面的 cifs 格式,此處格式成為 nfs ,若為 nfs 4.0個版本,則改為 nfs4 。接著 //192.168.100.10/sharenfsdisk, 一樣為來源主機的IP位址與分享的資料夾,再接著後面的目標資料夾 /mnt/nfsdisk ,相同的若無此路徑,要先新增 */

    下一節,筆者繼續來介紹,為了讓電腦主機可以一週七天,每天24小時的運作,一定會常用到的不斷電系統(UPS),以及其它硬體裝置,如印表機、網路硬碟 NAS 的掛載。

這個網誌中的熱門文章

Linux操作不求人 - 伍章之伍 - make 巨集式編譯器

make是Linux下安裝軟體與程式一個相當重要的工具,如前章節所提的安裝軟體三劍客。 configure, make , make install。當我們完成自己所撰寫的C 或 fortran程式,通常會使用編譯器指令 gcc -cgfortran -c 來編譯成連結檔或物件檔函式庫(Library),如 .a (https://en.wikipedia.org/wiki/Static_library) .o .so等附檔名,而此函式庫又可以讓其他程式利用其中的函式與類別。何時要用到動態或靜態函式庫,stackoverflow有專業的回答(https://stackoverflow.com/questions/140061/when-to-use-dynamic-vs-static-libraries)。

假設我們要寫一個簡單的 C 程式,檔名為 hellomake.c,用 make 來編譯我們的程式,程式如下:
#include<stdio.h>
void main ( void )
{
   print ("This is my first c file."\n);
}

---------------------------------------------------
儲存離開後,利用autoscan 指令,便會產生如圖5-70的兩個檔 autoscan.log 與 configure.scan,而 configure.scan 便是需要產生標準的 GNU makefile 的關鍵檔。我們可以把他改成 configure.in 或 configure.ac,並利用 vim configure 來修改參數,如圖5-71,改為圖5-71右邊的參數











(圖5-70)





(圖5-71)


修改完 configure.in 內的參數後,再執行 aclocal 與 autoconf ,就會產生 autom4te.cache 的資料夾與 configure 的執行檔,此執行檔就是先前章節所要編譯原始碼前,會執行的 ./configure ,並會產生適合您的機器環境之 GNU Makefile,如圖5-72


(圖5-72)
接著編輯 Makefile.am 檔的內容,加入如下內容
AUTOMAKE_OPTION=foreign b…

Linux操作不求人 - 肆章之貳 - 伺服器架設(II) - 郵件伺服器 - postfix 與 dovecot

CentOS6_x64 在預設狀態下,通常已經有開啟發 email 的伺服器軟體 postfix,但僅限制在本機(localhost / 127.0.0.1 ) 使用,且僅是讓系統可以傳送錯誤訊息給 root。故我們要經由設定,讓電腦主機內的使用者帳號,皆可以收發 email,而我們用的送信軟體為 postfix,負責 smtp 的部分( https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol ) ,收信軟體則為 dovecot,負責 pop 或 imap ( https://en.wikipedia.org/wiki/Post_Office_Protocol,https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol )的部分,收發信機制的運作機制,可參考wikipedia,https://en.wikipedia.org/wiki/Email,筆者不再贅述,直接說明架設伺服器軟體的操作。先利用 rpm -qa | grep postfix 與 rpm -qa | grep dovecot 來查詢是否已經有安裝,若無,則利用 yum install postfix 與 yum install dovecot 來安裝。除此之外,再利用 chkconfig | grep postfix 與  chkconfig | grep dovecot 來確認是否有在開機時啟動,若想自動化開機啟動,再請設定 chkconfig --level 235 postfix on 與  chkconfig  --level 235 dovecot on 來載入。 如圖4-10與圖4-11:
































(圖4-10)
















(圖4-11)

     接著我們利用 vim 來修改 postfix 設定檔  /etc/postfix/main.cf 。相同地,我們先閱讀設定檔內容前面的說明,postfix 的作者相當細心,每個設定前的說明很詳細,故設定檔很長,請讀者要有耐心閱讀,如圖4-12-1 至 圖4-12-7。往後篇章若設定檔內容太長,筆者便不再列出,會直接說明新增與修改處,在此先說明。




























































































(圖4-12-1)




























































































(圖4-12-2)





























































































(圖4-12-3)





























































































(圖4-12-4…

Linux 操作不求人系列 - 貳章之壹 - Shell Script 程式設計(I) - BASH

本章開始進入Shell Scripts的程式設計,因為Linux Shell的種類相當多,故筆者僅挑選預設的Bash Shell 及 學術界常會使用的 C Shell (/bin/tcsh )來說明與對照,在此先說明。至於 Scripts 的概念,在前章就已經說明過,可視為前壹章的各項指令之組合,在令其在執行檔案裡,依序執行,如前章所看到的 /etc/profile 檔案,在其他軟體上,有點類似巨集(macro)的執行檔,或是MS Windows的批次檔(Batch)。先建立此概念後,我們可以先在Terminal的命令提示字元,使用 for 指令,如圖2-1,在 shell scripts 內為了重複做一件事,而僅修改某些變數值,我們會利用所謂的迴圈(loop)方式來完成,而 bash shell 內常用的是 for 或是 tcsh/csh shell 內的 foreach



























(圖2-1)


     圖 2-1第一個指令輸入 for 的宣告,後面接著 seq 為變數名稱,為了逐次接收 in 後面之陣列值(http://www.gnu.org/software/bash/manual/html_node/Arrays.html)(註:若加了 ; 則 do 便可寫在同一行),接著 > 的提示字元的等待輸入,便是還沒遇到 done 指令來結束 do 的動作,控制此提示字元的環境變數為 PS2。,此例的 seq 值,依序為第一次讀入 first 字串並存入變數 seq 當其值,接著second、third,從 echo $seq 可以看出,接著設定一個變數 file 其值為 my開頭字串,緊接變數值 $seq(first、second、third),再接固定的 script.sh 字串,接著利用echo指令,印出變數值$file,檢查是不是我們預期的字串值(註:如果想要暫停,讓使用者可以看清楚再繼續,可以加上指令sleep 3,表示畫面停止三秒鐘),接著利用 touch 指令產生 $file 字串值的檔案,再將其利用 chmod 指令,u+x 參數為令僅創立此檔的使用者帳號可執行(若要改為同群組可執行,參數需改為 g+x)。故可看到第二個指令輸入 ls,便列出自動批次產生的shell執行檔了。
     以上其實就是 Shell Script 的程式設計之…