You are on page 1of 46

CAT Filesystem

Linux 下的目錄與標籤式檔案系統
Draft 0.2

墳墓( Brian Hsu )

1
授權聲明
► 本文以 『 Creative
Commons 姓名標示 - 非
商業性 - 禁止改作 2.0 台灣』 進行授權
► 您可以在下列的條件下自由重製、散布、展
示及演出本著作。
 姓名標示:您必須保留原作者的姓名標示。
 非商業性:您不得為商業目的而使用本著作。
 禁止改作: 您不得改變、轉變或改作本著作。
► 詳情請見

ttp://creativecommons.org/licenses/by-nc-nd/2.0/tw/
2
Outline
► 階層式檔案系統架構
► 階層式檔案系統的問題
► 解決方案
 Link ( 捷徑 )
 Application
 全文檢索
 Label (Tag)

3
Outline
► 是否需要發展一套 FS
 Application 的問題
 Extendend File Attributes
► CatFS Approach
► CatFS 系統特色
► 系統架構
► 待討論事項
► 要解決的問題
► TODO List 4
階層式檔案系統
► 樹狀節構
► 所有資料都可分為兩種基本型態
 目錄
 檔案
► 檔案一定在某一個目錄之下

5
階層式檔案系統的問題
► 階層式檔案系統的基本特性
 一個檔案只能在一個目錄之中
► 現實的生活中
 一個檔案可能同時屬於好幾個分類
►與『一個檔案只能在一個目錄』相扺觸

6
階層式檔案系統的問題:
Example
~
+--Photo
| +-- 社團
| | +--- 園遊會
► 我所規劃的檔案架構如 | | +--- 迎新茶會
右 | | +--- 社遊
| +-- 奶茶
► 社團照片以活動為分類 | +--- 桌布
► 每個檔案都有特定的目 | +--- 聽說宣傳照
|
錄可以存放 +--MP3
 Ex: | +-- 奶茶
 奶茶的歌放在 ~/MP3/ 奶 | | +--- 很愛很愛妳
| | +--- 單身日誌演唱會
茶 /[ 專輯名稱 ] 中
| | +--- 聽說
 奶茶的照片放在 | +-- 陳昇
~/Photo/ 奶茶 /[ 分類 ] | +--- 美麗寶島跨年演唱會
中 +--MTV
+-- 奶茶
► 世界一片美好? 7
+-- 陳昇
階層式檔案系統的問題:
Example
► 我要如何在所有的社團照片中,找到特定主
題的照片?
 Ex: cosplay 、木偶、社團合照,特定社員… etc

8
階層式檔案系統的問題:
Example
► 我的檔案以檔案類型分類
 音樂 => ~/MP3
 照片 => ~/Photo
 影片 => ~/MTV
► 如何做到下面的事情?
 找出奶茶聽說專輯的所有檔案 (MP3,MTV,Photo)
 找出奶茶很愛很愛你的照片和音樂
 找出奶茶或南方二重唱的所有 MTV 和奶茶的照片
► 在目錄的架構下,以上的所有都是癡心妄想!
9
解決的方式
► Link ( 捷徑 )
► Application
► 全文搜尋
► Label
 Mac OS X
 Gmail/Picasa2

10
解決方法: Link

► 把我希望放在一起的檔案,建立一個目
錄,並將原始檔 link 在那個目錄內。
 Ex:
 建一個『聽說照片 MV 』的資料夾,再把所
有相關檔案在該目錄中建立捷俓。
► 幾乎所有作業系統都有提供
 Windows => 捷徑
 Un*x => Soft Link
11
Link 的問題
► Soft link
 原始檔案刪除, soft link 隨之無效
► Hard link
 把主目錄裡的檔案刪除,卻無法釋放磁碟空間
► Link無法與主目錄裡的更動自動同步
► 人是多變的,除非用窮舉,否則不可能我要
找任何關鍵字的組合時都能馬上找到對應的
目錄
► Example: 五個分類
 C5,1 + C5,2 + C5,3 + C5,4 + C5,5 = 31 !! 12
解決方法: Application
► 利用軟體進行檔案的管理
 iTunes
 Picasa2
► 只能進行特定檔案類型的管理
 iTunes => 音樂
 Picasa2 => 照片

13
解決方法: Application (Cont.)
► 如果我想用統一的方式管理我電腦上的所有
檔案?
 Ex: MP3/MPG/JPEG/TXT/PDF…etc.
► 確實有人在檔案管理員程式加入 metadata
的功能。
 Ex: GNOME Nautilus

14
解決方法:全文檢索
► 電腦是很笨的,特別在斷字、斷句、斷詞以
及文章脈絡的判斷
► Google Desktop Search
► 無法進行精確的搜尋
► 沒有義意的照片編號,如何搜尋
► Example:
 內文有『奶茶』兩字的檔案,不一定就與劉若
英有關係
 對劉若英的訪問,或許會提到陳昇或張艾嘉,
但不應該被分到『陳昇』或『張艾嘉』的分類 15
16
17
解決方法: Label
► 替檔案加上一個特殊的屬性: Label (Tag)
► 目前使用 Label 功能的有以下兩個系統
 Mac OS X Finder
 Gmail/Picasa2

18
Mac OS X Label
► 以顏色區分,使用者能設定 label 名稱
► 一個檔案只能設定一個 label
 就某方面來說,這不過是從『一個檔案只能在一
個目錄內』 => 『一個檔案只能在兩個目錄
內』
► Label數目有限制,只能使用內建的顏色,
無法新增
► Mac OS X 雖然有 label ,但仍無法解決
P8,9 所提出的問題
19
20
Gmail/Picasa Label

► 沒有階層式的目錄架構,只有 Label
 目錄在多層次的組織上,依然很有用,但
GMail 不支援
► 一封信可以有多個 Label
► Label 數目沒有限制
► Gmail 可以用 Label 搜尋,但無法進行
複雜的條件判斷。
► Picasa2 只能處理 and 運算元
21
Gmail/Picasa Label (Cont.)

22
Gmail/Picasa Label (Cont.)

23
Gmail/Picasa Label (Cont.)

24
檔案系統 vs 應用程式?
► 要實作 Label (Tags) 真的需要搞到檔案系統
嗎?畢竟大不了我寫隻什麼檔式都可以吃,
又可以設 label 的檔案管理員嘛!
► 再不然,目前許多的檔案系統也提供使用設
定額外的屬性,實在沒必要發展一套新的檔
案系統。

25
Application 的問題
► 連續性
 在 Un*x 的世界裡,圖型界面的檔案管理員有許多種
(Ex: KDE,GNOME…etc)
 如果使用 Application 來記錄 Tags ,會發生不連續性
的問題。
► Example:
 在 Nautilus 中設定一個 foo 這個目錄的底色
 在 command line 下 mv foo bar
 理論:這只是改名,不應該把底色改掉
 事實:底色的資訊不見了

26
Application 的問題 Example
► 請回憶剛剛的 Picasa2
► 我把原本在桌面的 Club 資料夾『剪下貼
上』到 C:\
► 理論上這個應該是兩個完全相同的資料夾,
因此不應該有資料的流失
► 但是我再次開啟 Picasa2 後……

27
Application 的連續性問題 (Cont.)

28
Application 的連續性問題 (Cont.)
► 好,是我太笨,移動了資料夾,當然要叫應
用程式到新的資料夾去找我的照片。
► 老天保佑,我辛苦建立起來的 label 還在。
► 可是事實上……

29
Application 的連續性問題 (Cont.)

30
Extended File Attributes
► 不過是加個 Tag 屬性,有必要動到檔案系統嗎?
 現在的 ReiserFS 都有提供 Extended file attributes 啦

► Extendend File Attributes
 Key = Value
 ~/MP3/ 劉若英 / 聽說 / 幸福的路 .mp3
► tags = 奶茶 | 聽說 | 音樂
► 架構在原本的 inode 上,如何進行快速搜尋?這樣
速度會與直接搜尋檔名差不多,甚至更慢,因為要
再將 tags 的內容拆開分析。
 為什麼要浪費時間在使用者不感興趣的檔案上?
31
CAT Filesystem
► CAT
 CAT: 貓, Catlog 之縮寫
 CAT And Tags Filesystem
► 一個具備階層及標籤管理方式的檔案系統
► 提供使用者一個快速搜尋的系統
 以搜尋速度做為實作的最重要考量

32
CatFS’s Approach
► 以目錄為主要分類架構,標籤搜尋為輔
► 使用者可以自行設定檔案的標籤屬性
► 找出奶茶聽說專輯的所有檔案
 Search Tag: 聽說
► 找出奶茶很愛很愛你的照片和音樂
 Search Tag: ( 照片 OR 音樂 ) AND 很愛很愛你
► 找出奶茶或南方二重唱的所有 MTV 和奶茶的照片
 Search Tag: ( ( 南方二重唱 OR 奶茶 ) AND MTV ) OR
( 奶茶 AND 照片 )

33
CatFS 系統特色
► 與現有 Linux 檔案系統向下相容
 Ex: Ext3/ReiserFS…
► 使用者可以自由對任何檔案設定任何標籤
 當使用者對目錄進行設定標籤的動作時,不論哪一個
► 虛擬目錄
► 資源回收筒
► 備份、回存標籤相關資訊

34
虛擬目錄
► 在不更動使用者的習慣下,以目錄表示出標
籤的架構
► 靜態虛擬目錄
 單一的標籤
 可新增、刪除檔案的標籤屬性
► 動態虛擬目錄
 mkdir Tag: ( 奶茶 AND MP3)
 唯讀
35
虛擬目錄 Example
$ cd ~/.tags
$ ls
奶茶 南方二重唱 陳昇
$ cd 奶茶
$ ls
很愛很愛你 .mp3 後來 .mp3 相知相守 .mp3…
$ mv 相知相守 .mp3 ../ 南方二重唱
 刪除 相知相守 .mp3 『奶茶』的標籤,加上
『南方二重唱』的標籤

36
系統架構
► Tags
的儲存
► 資源回收筒

37
Tags 的儲存

► 在自己的一個檔案中,在使用 Ext3 的
kernel 下,看起來只是一個檔案。
► 只有 kernel level 看的到這個 Tags 檔
案,所有與檔案相關的 system call 都
會將這個檔案當做不存在。
► For Example:
 在 Ext3 的根目錄,將某個 entry ,指到
特定的 inode ,該 inode 所存的即是這個
tags 檔。 38
資源回收筒
►對 unlik() 動手角
► 只在特定的目錄下,才真的進行 unlink 的動

39
待討論的事項
► 使用的 Kernel 版本
 2.4 or 2.6
► 架構在哪種 FS 之上
 Ext3
 ReiserFS
► 詳細的 Tags 動作
 是否需要以目錄為單位的 Tags ?
 複製檔案是否要複製 Tags 屬性
40
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
需要解決的問題
►解 Muti-User 環境下造成的混淆
 brianhsu 有個 Photo 標籤
 mission 也有個 Photo 標籤
► Permission
 是否該讓使用者以標籤做為分享檔案的媒介?
► 如何備份複原 Tag 資料
 提供相關工具,可以 export/import Tags 檔案
 如何在 import 後進行正確性的檢查,或是
inode 對應的修改?
42
需要解決的問題 (Count.)
► 如何不讓一般檔案操作的速度降低
► 搜尋速度
 要如何設計我們的資料結構,才能讓複雜的條件式搜尋
,能夠在短時間內找出結果。
► Cache
 如何讓虛擬目錄的速度不致於和 Native 相差過多?
► Tags 的連續性
 在使用者 cp/mv/rm 檔案時,如何能夠維持檔案與 tag
的一致性,並且不致於拖累這些操作的時間。

43
需要解決的問題 (Count.)
► Tags 正確性的檢查 (fsck 的處理 )
 感謝 SayYA BBS 上的 anton 提出這個問題
 如果 label 與檔案不一致,如何處理?
►正確的 Tag 對到存在但已損壞的檔案 => 不理他,
就像一個檔名可能對到一個損壞的檔案。
►Tag 對應到一個不存在的檔案 => 應該要將該 tag
中的那個 entry 清掉,不過在正常的情況下不應該發
生,因為理論上在刪掉一個檔案時, kernel 就應該要
把那 Tag 清掉。
►Tag 對應到不是當初使用者指定的檔案 => ……

44
需要解決的問題 (Count.)
► 與現有指令以及應用程式的整合
 Kernel 與 User level 的切割

45
TODO List
► 弄清楚 VFS/Ext3/Kernel Module 的架構
► 在原有的基礎下設計我們的相關資料結構
► 實作 Kernel 層
► 實作 User Application 層

46

You might also like