跳到主要內容

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 操作不求人系列 - 貳章之貳 - Shell Script 程式設計(II) - BASH 與 TCSH / CSH

     在上章,我們介紹很多bash shell指令的應用方式,並讓它們變成 script,在這章此節,我們要承襲上節,繼續討論 bash shell script 的其它程式設計概念,與讓程式可重複使用的方法,就是利用函式(function)。      首先,我們來創作一個判斷是否為閏年的函數,script的名稱就取為 check_year.sh ,請自行將其設為可執行。程式碼如圖2-6,為了解說方便,筆者利用指令 nl check_year.sh 將程式碼包含行數印出(圖2-7),其他除顏色外,都與圖2-6同。以下 export 宣告環境變數,自訂變數無需加宣告保留字。(2021.10.07更正export說明,以下自訂變數宣告請直接去除export開頭) (圖2-6) (圖2-7)        圖2-7第2-6行,與之前的範例相似,皆有防堵參數個數輸入錯誤的判斷。第7-11行為接著判斷輸入的年分,是否為真的正整數,也就是大於零的數字。其中第7行可解釋為,利用正規表示式搜尋 $2 字串值得頭至尾部的字元,皆由 0-9 組成,若有,則為真(True)會進入 if 內的陳述執行, 但我們想要的,應該是僅要字串其中一字元為非正整數,便進入if 內的警告並跳出 。故,筆者在判斷式前多加一個 ! ,代表著當字元完全是正整數時,就不要執行  if  內陳述,而直接往第12行執行,但若其中有一個字元為非正整數,則會進入 if 內印出錯誤訊息並跳出 Script 。在此例使用者輸入非正整數等字串(如:12ab、cde、1a1b),便會出現錯誤訊息"Error Value",並跳出 Script 。而第8行的判斷式,效果跟第7行相同,但只能在BASH 3.0才能支援,故筆者故意保留,讓讀者可以學到另一種表示方式。         第12-28行,為宣告一個函式 leapyr () ,在 BASH Script內若要使用含式,必須在使用之前先建立函式的功能,如函式建立在第12-28行,則若要呼叫使用(Call)函式,則必須在第29行之後才能呼叫,並且可重複呼叫。第13行為定義函式呼叫時,一定會有一個外部參數, 此外部參數非該 Script 的外部參數 ,而是由程式撰寫者給入,故在此無設定防呆判斷。第14-

Linux操作不求人- 肆章之壹 - 伺服器架設(I) - SSH(SFTP、SCP)、FTP伺服器與遠端連線

@ ssh, sftp      通常安裝好 CentOS6_x64 作業系統後,sshd, ssh daemon 的服務功能是預設開啟的,如筆者的前面篇章所述,預設的 iptables 防火牆設定,亦是開啟讓 ssh 的連線是可通過的,不僅可以連出,也可以被連入。若要確認是否有安裝 sshd 套件以及在啟動時的 runlevel 2 3 5 是否有被載入,可以使用以下指令搜尋: $   rpm  -qa  |   grep  openssh     #  ssh 與 sshd 連線服務皆由 openssh 應用軟體提供。 或使用以下 $   rpm  -qa  |   grep  ssh         #  比用關鍵字 openssh 搜尋更模糊,故符合的條件更多。      如圖4-1可以查詢到有關於 openssh-client 與 openssh-server 的套件, openssh-server 便是提供連入服務的軟體,openssh-client 為提供可以連出的工具。若無以上套件,則使用 yum install openssh ,則可下載安裝。 (圖4-1) 再接著輸入以下指令查詢到 sshd 這個服務,是否有再開機程序內載入,如圖4-2 $ chkconfig | grep ssh   # 查詢 sshd 是否有於 開機 runlevel 啟動 再利用以下指令,來查詢是否防火牆有允許連線 $ iptables  -L  |  grep ssh   # 出現如圖4-2 允許通過之條件 (圖4-2)      接下來,我們要先來調整 sshd 的設定檔,利用 vim  /etc/sshd/sshd_conf ,如圖4-3-1與4-3-2。因為設定檔參數很多,筆者為方便說明,將 /etc/sshd/sshd_conf 檔案內容分成兩張圖。 (圖4-3-1)

Linux操作不求人 - 伍章之陸 - Intel PXE 與利用 tftp + anaconda kickstart來自動部署系統

     現代的個人電腦與筆電爲了節能省碳,往往皆省略了光碟機的設置。雖然說 USB隨身碟亦可應用於安裝作業系統,但若遇到機房的大量機器需安裝之問題,亦不適合此種用光碟片或隨身碟逐臺安裝的方式,或是需準備多片光碟或隨身碟。故爲了大量安裝與部屬 Linux作業系統的機器,我們便可透過具有PXE功能之網路卡(https://en.wikipedia.org/wiki/Preboot_Execution_Environment),其所具備的網路開機的能力,來作透過網路方式來安裝與大量部署 CentOS Linux作業系統。其原理 wikipedia  的PXE說明,都解釋得很清楚,筆者不需要再 " 掉書包 ",在開發者大神面前班門弄斧,我們就直接來做做看。      首先,我們一樣透過 yum來安裝所需的 tftp伺服器軟體(http://www.jounin.net/tftpd32.html),利用PXE支援 tftp 透過 udp 埠號 69連線,來提供檔案的能力,給利用 PXE開機後安裝作業系統的機器,圖5-60   (圖5-60) 接著修改 tftp 設定檔 /etc/xinetd.d/tftp,如圖5-61,請記得 disable  要改為 no (圖5-61)      若要修改 server_args 參數為自訂的 tftp root 路徑,記得要變更 SELinux 的權限設定,如要改為/tftpboot,則使用指令 chcon  來調整,如以下: $ mkdir /tftpboot $ chcon  --reference /var/lib/tftpboot  /tftpboot 接著將 xinetd 與 tftp 加入開機啟動,並重啟動 xinetd,如下: $ chkconfig  --level  235  xinetd on $ chkconfig  --level  235  tftp  on $ service xinetd restart 開放防火牆通行 $ iptables -A INPUT -p udp --dport 69 -j ACCEPT $ service iptables re