Cat Fs Draft2. 授權聲明
► 本文以 『 Creative
Commons 姓名標示 - 非
商業性 - 禁止改作 2.0 台灣』 進行授權
► 您可以在下列的條件下自由重製、散布、展
示及演出本著作。
姓名標示:您必須保留原作者的姓名標示。
非商業性:您不得為商業目的而使用本著作。
禁止改作: 您不得改變、轉變或改作本著作。
► 詳情請見
ttp://creativecommons.org/licenses/by-nc-nd/2.0/tw/
2
4. Outline
► 是否需要發展一套 FS
Application 的問題
Extendend File Attributes
► CatFS Approach
► CatFS 系統特色
► 系統架構
► 待討論事項
► 要解決的問題
► TODO List 4
7. 階層式檔案系統的問題:
Example
~
+--Photo
| +-- 社團
| | +--- 園遊會
► 我所規劃的檔案架構如 | | +--- 迎新茶會
右 | | +--- 社遊
| +-- 奶茶
► 社團照片以活動為分類 | +--- 桌布
► 每個檔案都有特定的目 | +--- 聽說宣傳照
|
錄可以存放 +--MP3
Ex: | +-- 奶茶
奶茶的歌放在 ~/MP3/ 奶 | | +--- 很愛很愛妳
| | +--- 單身日誌演唱會
茶 /[ 專輯名稱 ] 中
| | +--- 聽說
奶茶的照片放在 | +-- 陳昇
~/Photo/ 奶茶 /[ 分類 ] | +--- 美麗寶島跨年演唱會
中 +--MTV
+-- 奶茶
► 世界一片美好? 7
+-- 陳昇
8. 階層式檔案系統的問題:
Example
► 我要如何在所有的社團照片中,找到特定主
題的照片?
Ex: cosplay 、木偶、社團合照,特定社員… etc
8
9. 階層式檔案系統的問題:
Example
► 我的檔案以檔案類型分類
音樂 => ~/MP3
照片 => ~/Photo
影片 => ~/MTV
► 如何做到下面的事情?
找出奶茶聽說專輯的所有檔案 (MP3,MTV,Photo)
找出奶茶很愛很愛你的照片和音樂
找出奶茶或南方二重唱的所有 MTV 和奶茶的照片
► 在目錄的架構下,以上的所有都是癡心妄想!
9
10. 解決的方式
► Link ( 捷徑 )
► Application
► 全文搜尋
► Label
Mac OS X
Gmail/Picasa2
10
12. Link 的問題
► Soft link
原始檔案刪除, soft link 隨之無效
► Hard link
把主目錄裡的檔案刪除,卻無法釋放磁碟空間
► Link無法與主目錄裡的更動自動同步
► 人是多變的,除非用窮舉,否則不可能我要
找任何關鍵字的組合時都能馬上找到對應的
目錄
► Example: 五個分類
C5,1 + C5,2 + C5,3 + C5,4 + C5,5 = 31 !! 12
14. 解決方法: Application (Cont.)
► 如果我想用統一的方式管理我電腦上的所有
檔案?
Ex: MP3/MPG/JPEG/TXT/PDF…etc.
► 確實有人在檔案管理員程式加入 metadata
的功能。
Ex: GNOME Nautilus
14
15. 解決方法:全文檢索
► 電腦是很笨的,特別在斷字、斷句、斷詞以
及文章脈絡的判斷
► Google Desktop Search
► 無法進行精確的搜尋
► 沒有義意的照片編號,如何搜尋
► Example:
內文有『奶茶』兩字的檔案,不一定就與劉若
英有關係
對劉若英的訪問,或許會提到陳昇或張艾嘉,
但不應該被分到『陳昇』或『張艾嘉』的分類 15
19. Mac OS X Label
► 以顏色區分,使用者能設定 label 名稱
► 一個檔案只能設定一個 label
就某方面來說,這不過是從『一個檔案只能在一
個目錄內』 => 『一個檔案只能在兩個目錄
內』
► Label數目有限制,只能使用內建的顏色,
無法新增
► Mac OS X 雖然有 label ,但仍無法解決
P8,9 所提出的問題
19
25. 檔案系統 vs 應用程式?
► 要實作 Label (Tags) 真的需要搞到檔案系統
嗎?畢竟大不了我寫隻什麼檔式都可以吃,
又可以設 label 的檔案管理員嘛!
► 再不然,目前許多的檔案系統也提供使用設
定額外的屬性,實在沒必要發展一套新的檔
案系統。
25
26. Application 的問題
► 連續性
在 Un*x 的世界裡,圖型界面的檔案管理員有許多種
(Ex: KDE,GNOME…etc)
如果使用 Application 來記錄 Tags ,會發生不連續性
的問題。
► Example:
在 Nautilus 中設定一個 foo 這個目錄的底色
在 command line 下 mv foo bar
理論:這只是改名,不應該把底色改掉
事實:底色的資訊不見了
26
27. Application 的問題 Example
► 請回憶剛剛的 Picasa2
► 我把原本在桌面的 Club 資料夾『剪下貼
上』到 C:
► 理論上這個應該是兩個完全相同的資料夾,
因此不應該有資料的流失
► 但是我再次開啟 Picasa2 後……
27
31. Extended File Attributes
► 不過是加個 Tag 屬性,有必要動到檔案系統嗎?
現在的 ReiserFS 都有提供 Extended file attributes 啦
!
► Extendend File Attributes
Key = Value
~/MP3/ 劉若英 / 聽說 / 幸福的路 .mp3
► tags = 奶茶 | 聽說 | 音樂
► 架構在原本的 inode 上,如何進行快速搜尋?這樣
速度會與直接搜尋檔名差不多,甚至更慢,因為要
再將 tags 的內容拆開分析。
為什麼要浪費時間在使用者不感興趣的檔案上?
31
32. CAT Filesystem
► CAT
CAT: 貓, Catlog 之縮寫
CAT And Tags Filesystem
► 一個具備階層及標籤管理方式的檔案系統
► 提供使用者一個快速搜尋的系統
以搜尋速度做為實作的最重要考量
32
33. CatFS’s Approach
► 以目錄為主要分類架構,標籤搜尋為輔
► 使用者可以自行設定檔案的標籤屬性
► 找出奶茶聽說專輯的所有檔案
Search Tag: 聽說
► 找出奶茶很愛很愛你的照片和音樂
Search Tag: ( 照片 OR 音樂 ) AND 很愛很愛你
► 找出奶茶或南方二重唱的所有 MTV 和奶茶的照片
Search Tag: ( ( 南方二重唱 OR 奶茶 ) AND MTV ) OR
( 奶茶 AND 照片 )
33
34. CatFS 系統特色
► 與現有 Linux 檔案系統向下相容
Ex: Ext3/ReiserFS…
► 使用者可以自由對任何檔案設定任何標籤
當使用者對目錄進行設定標籤的動作時,不論哪一個
► 虛擬目錄
► 資源回收筒
► 備份、回存標籤相關資訊
34
36. 虛擬目錄 Example
$ cd ~/.tags
$ ls
奶茶 南方二重唱 陳昇
$ cd 奶茶
$ ls
很愛很愛你 .mp3 後來 .mp3 相知相守 .mp3…
$ mv 相知相守 .mp3 ../ 南方二重唱
刪除 相知相守 .mp3 『奶茶』的標籤,加上
『南方二重唱』的標籤
36
38. Tags 的儲存
► 在自己的一個檔案中,在使用 Ext3 的
kernel 下,看起來只是一個檔案。
► 只有 kernel level 看的到這個 Tags 檔
案,所有與檔案相關的 system call 都
會將這個檔案當做不存在。
► For Example:
在 Ext3 的根目錄,將某個 entry ,指到
特定的 inode ,該 inode 所存的即是這個
tags 檔。 38
40. 待討論的事項
► 使用的 Kernel 版本
2.4 or 2.6
► 架構在哪種 FS 之上
Ext3
ReiserFS
► 詳細的 Tags 動作
是否需要以目錄為單位的 Tags ?
複製檔案是否要複製 Tags 屬性
40
41. ResierFS 3.6 / 4
► ReiserFS 3.6
Journalling file system for Linux based on
balance tree algorithms.
對小檔案的處理效能較高
► ReiserFS 4
號稱是最快的檔案系統,但個人感覺比 ResierFS
3.6 差了一點,而且很吃 CPU
Atomic filesystem
Reiser4 uses dancing trees
41
42. 需要解決的問題
►解 Muti-User 環境下造成的混淆
brianhsu 有個 Photo 標籤
mission 也有個 Photo 標籤
► Permission
是否該讓使用者以標籤做為分享檔案的媒介?
► 如何備份複原 Tag 資料
提供相關工具,可以 export/import Tags 檔案
如何在 import 後進行正確性的檢查,或是
inode 對應的修改?
42
43. 需要解決的問題 (Count.)
► 如何不讓一般檔案操作的速度降低
► 搜尋速度
要如何設計我們的資料結構,才能讓複雜的條件式搜尋
,能夠在短時間內找出結果。
► Cache
如何讓虛擬目錄的速度不致於和 Native 相差過多?
► Tags 的連續性
在使用者 cp/mv/rm 檔案時,如何能夠維持檔案與 tag
的一致性,並且不致於拖累這些操作的時間。
43
44. 需要解決的問題 (Count.)
► Tags 正確性的檢查 (fsck 的處理 )
感謝 SayYA BBS 上的 anton 提出這個問題
如果 label 與檔案不一致,如何處理?
►正確的 Tag 對到存在但已損壞的檔案 => 不理他,
就像一個檔名可能對到一個損壞的檔案。
►Tag 對應到一個不存在的檔案 => 應該要將該 tag
中的那個 entry 清掉,不過在正常的情況下不應該發
生,因為理論上在刪掉一個檔案時, kernel 就應該要
把那 Tag 清掉。
►Tag 對應到不是當初使用者指定的檔案 => ……
44
46. TODO List
► 弄清楚 VFS/Ext3/Kernel Module 的架構
► 在原有的基礎下設計我們的相關資料結構
► 實作 Kernel 層
► 實作 User Application 層
46