文、講師 小州老師

2013-1-3 上午 11-43-16  

《前言》

       不知道大家是否有聽過 exfat 檔案系統格式呢?大家常常聽到的檔案系統格式應該有 fat32 或者是 ntfs,熟悉 linux 的朋友應該還會知道 ext3 與 ext4 檔案系統格式。不過這幾年在某些場合環境可能會看到某個磁碟儲存裝置本身是格式化使用 exfat 格式,這與之前常看到格式有哪些不同呢?是可以好好了解一下。
 
《一般格式化使用的檔案系統》

       目前的時代每個人都會有隨身可以帶著走的儲存裝置,不管是小一點容量的 USB 隨身碟,或者是大一點的外接USB硬碟等,目前要取用可用的儲存空間已經非常簡單。不管是哪種儲存裝置需要使用都需要進行最基本的的 格式化成為特定檔案系統才可以用,所以對於容量比較小的 USB隨身碟 (2GB,4GB.. 等) 大多成為 fat16 或是  fat32 檔案系統。對於大一點的 usb 硬碟 (300G, 500G 等 ) 則格式化使用 ntfs 格式。
 
       常聽到的 fat 檔案系統依據時代變遷發展到現在比較常聽到的有 fat12, fat16 與 fat32,其中 fat 檔案系統格式後面加上一個數字表示空間的定址能力,而且支援的單一檔案大小也都不一樣。簡單資訊如下:
 
 FAT12,支援到最大單一分割區 (儲存空間) 為 32 MB,單一檔案最大限制 32 MB
 FAT16,支援到最大單一分割區 (儲存空間) 為 2 GB,單一檔案最大限制 2 GB
 FAT32,支援到最大單一分割區 (儲存空間) 為 2 TB,單一檔案最大限制 4 GB
 
      不過其中 fat16 與 fat32 檔案系統還會因為 cluster 大小採用 32 KB / 64KB 時候會所有變化,比方 fat16 使用 64k 的 cluster 空間大小時候可以讓單一分割區/儲存空間高達 4GB,而 fat32 使用 32k cluster空間大小時候可以讓單一分割區/儲存空間高達 8TB,不過不是使用預設的標準設定。理論上 fat32 是可以有機會單一分割區/儲存空間高達 8TB,但是 cluster 的數量限制等問題等,大多系統有 124GB 等限制使用。
 
      FAT 檔案系統是很常見格式,早年 1980 年代就可以看到,普遍被許多作業系統所支援,所以早期 dos 系統還有包含現在的 windows 系統都支援,甚至作業系統本身就放置在這個檔案系統下所使用。fat 檔案系統本身結構很簡單,所以大家目前連相機所使用的記憶卡也都採用 fat 檔案系統格式,不過 fat 本身並不像是 ntfs 或者是 linux  ext3fs 屬於日誌式檔案系統架構,所以卻少了資料防護上的能力...
 
      上面有提到 fat32 是可以支援單一儲存空間到 2TB,不過很有趣的是 windows 系統格式化磁碟的畫面內有個奇怪的設計,那就是若是單一儲存空間的裝置若是本身超過 32GB 的話就不會出現格式化成為 fat32 的選項,所以只有 ntfs 格式可以選擇使用。關於這個問題 microsoft 官方沒有標準明確文件提到為何會這樣設計,而自己片段猜測想法是 fat32 架構在大空間容量的使用上效率比較低落,所以強迫使用者採用 ntfs 格式會更有優勢與效率。
 
exFat 檔案系統

      ExFat 檔案系統全名為 Extended File Allocation Table,有人則是稱呼為 FAT64,檔案系統結構與先前的 fat16或者是 fat32 有比較大的架構上差異,這個檔案系統最早期出現於  Windows CE 6 系統上面,到現在新的數位相機,使用的記憶卡可以看到使用的地方,針對 flash disk 這類磁碟最佳化所以有有更好的讀寫支援,尤其剩餘空間的使用分配與檔案刪除的空間釋放方式有最佳處理,在行動平台環境磁碟空間分配使用有相當大的幫助。
 
      ExFat 實際理論上可以支援到單一分割區/儲存空間到 64 ZB,不過實際上建議最大使用到 512 TB 較佳,而單一檔案大小則支援到 16 EB。關於 ZB 單位困惑了嗎?空間儲存單位由小到大順序 MB, GB, TB , PB, EB, ZB, YB,所以 EB 這個單位目前來說還是屬於非常可觀無法想像的空間大小,不過相信不久之後生活上應該可見普遍使用到這些新的單位。

Linux 下安裝支援 ExFAT 檔案系統

      Linux 系統下目前的 linux kernel 還沒有正式納入支援 exfat 檔案系統格式,所以需要正確讀寫該檔案系統需要第三方的專案計畫來達成。目前在 linux 環境下常見是安裝使用 google code 網站上有個叫做 Free ExFAT file system  implementation 專案計畫成果來達成。
 
 官方網站: http://code.google.com/p/exfat/
 
       在傳統 linux 系統下面要系統支援某個檔案系統,一般作法需要在 linux kernel 內提供實作功能,所以大多方式是透過修改核心達成 source code 達成需求,不過 Free ExFAT Proeject 本身底層透過 FUSE (Filesystem in Userspace) 的方式實作,簡單說 Free ExFAT 專案計畫支援無需動到原本 linux kernel source 內容,透過系統目前現有的 FUSE 架構就可以直接實作一個檔案系統支援能力無需大浮動調整原本核心原始碼,大幅度簡化要設計與使用這個檔案系統的難度。
 
      下面環境以 RHEL6 或是 CentOS 6 為使用的平台,首先到官方網站下載 exfat project 的相關檔案內容。下載網站頁面: http://code.google.com/p/exfat/downloads/list
 
      由於裡面沒有直接提供 RHEL6/CentOS 6 的 binary package,所以只考慮 source rpm package 檔案。像是目前該頁面可以找到,如下檔案:
 
 fuse-exfat-0.9.8-1.fc17.src.rpm 與 exfat-utils-0.9.8-1.fc17.src.rpm
 
     這裡選擇是 source rpm 檔案不是 source tarball,因為這樣後續才好管理系統所安裝的套件項目。source rpm package 檔案要打包編譯成為 binary package 需要用到 rpmbuild 命令,其方式如下:
 
 rpmbuild --rebuild fuse-exfat-0.9.8-1.fc17.src.rpm exfat-utils-0.9.8-1.fc17.src.rpm
 
  不過注意到因為 exfat 這兩個套件還有需要用到其他相依搭配的套件包,所以若執行該命令顯示相依性錯誤則需要先用 yum 命令安裝上缺少的套件。手上測試過一般標準安裝之外還需要 scons 與 fuse-devel 套件。
 
 yum install scons fuse-devel
 
  這邊附註就是編譯這類 source code 需要用到 gcc/g++ 等這類編譯器,所以若是顯示無 compiler 的話請先安裝上 gcc 與 gcc-c++ 套件包才可以順利使用 rpmbuild 命令。
 
  rpmbuild 命令若正常跑完後會寫入兩個 binary 檔案,實際放置位置如下:
 
 /home/username/rpmbuild/RPMS/x86_64/exfat-utils-0.9.8-1.el6.x86_64.rpm
 /home/username/rpmbuild/RPMS/x86_64/fuse-exfat-0.9.8-1.el6.x86_64.rpm
 
  後續要使用透過 rpm -ihv 命令安裝上來使用:
 
 rpm -ihv /home/username/rpmbuild/RPMS/x86_64/exfat-utils-0.9.8-1.el6.x86_64.rpm
 rpm -ihv /home/username/rpmbuild/RPMS/x86_64/fuse-exfat-0.9.8-1.el6.x86_64.rpm
 
Linux 下使用 exfat 檔案系統

 要掛載使用 exfat 檔案系統的磁碟,mount 時候指定 exfat 格式即可。其操作命令如下:
 
  mount -t exfat /dev/device-name /mnt/dirname
 
 要格式化某個磁碟裝置使用 exfat,可以透過 mkfs.exfat 命令。其操作命令如下:
 
  mkfs.exfat /devv/device-name

2011-10-27-3.gif  

延伸閱讀

 

聯成電腦技術前線:玩玩 ssh + chroot 簡易環境架設

 

聯成電腦技術前線:談 Linux 系統環境快速建立大量的使用者帳號

 

聯成電腦分享:擁抱百萬雲端運算產業 競爭力全面升級 

 

arrow
arrow

    聯成電腦 發表在 痞客邦 留言(0) 人氣()