Linux 日志文件系統(tǒng)
前小節(jié)介紹了早期的 Linux 文件系統(tǒng),本小節(jié)介紹 Linux 日志文件系統(tǒng),日志文件系統(tǒng)是給 Linux 操作系統(tǒng)增加了一些安全相關(guān)能力,日志文件系統(tǒng)和早期的文件系統(tǒng)相比,它并不是先把數(shù)據(jù)寫到中間存儲設(shè)備,然后再寫到存儲設(shè)備索引節(jié)點的,而是先把數(shù)據(jù)寫道臨時生成的文件中(稱為日志),然后數(shù)據(jù)成功同步到存儲設(shè)備和索引節(jié)點表,再刪除對應的日志數(shù)據(jù)。本小節(jié)介紹 Linux 常見的日志文件系統(tǒng)。
1. ext3 文件系統(tǒng)介紹
ext3
文件系統(tǒng)是第三代擴展文件系統(tǒng)(Third extended filesystem,縮寫為 ext3
),它是一個日志文件系統(tǒng),經(jīng)常被用于 Linux 操作系統(tǒng)中,它是很多 Linux 發(fā)行版的默認文件系統(tǒng)。Stephen Tweedie 在 1999 年 2 月將該文件系統(tǒng)從 2.4.15 版本的內(nèi)核開始,合并到內(nèi)核主線中,它是對 ext2
系統(tǒng)的擴展,并且它兼容 ext2
。
日志式文件系統(tǒng)的優(yōu)越性在于:由于文件系統(tǒng)都有快取層參與運作,若不使用時必須將文件系統(tǒng)卸下,以便將快取層的資料寫回磁盤中,因此每當系統(tǒng)要關(guān)機時,必須將其所有的文件系統(tǒng)全部 shutdown
后才能進行關(guān)機,若在文件系統(tǒng)尚未 shutdown
前就關(guān)機如(停電)時,下次重開機后會造成文件系統(tǒng)的資料不一致,故這時必須做文件系統(tǒng)的重整工作,將不一致與錯誤的地方修復。
然而,此一重整的工作是相當耗時的,特別是容量大的文件系統(tǒng),而且也不能百分之百保證所有的資料都不會流失,此類文件系統(tǒng)最大的特色就是它會將整個磁盤的寫入動作完整記錄在磁盤的某個區(qū)域上,以便有需要時可以回溯追蹤。當在某個過程中被中斷時,系統(tǒng)可以根據(jù)這些記錄直接回溯并重整被中斷的部分,而不必花時間去檢查其他的部分,故重整的工作速度相當快,幾乎不需要花時間。
1.1 ext3 日志文件系統(tǒng)特點
-
高可用性:系統(tǒng)使用了
ext3
文件系統(tǒng)后,即使在非正常關(guān)機后,系統(tǒng)也不需要檢查文件系統(tǒng)。宕機發(fā)生后,恢復ext3
文件系統(tǒng)的時間只要數(shù)十秒鐘。 -
數(shù)據(jù)的完整性:
ext3
文件系統(tǒng)能夠極大地提高文件系統(tǒng)的完整性,避免了意外宕機對文件系統(tǒng)的破壞。在保證數(shù)據(jù)完整性方面,ext3
文件系統(tǒng)有兩種模式可供選擇。其中之一就是同時保持文件系統(tǒng)及數(shù)據(jù)的一致性
模式。采用這種方式,你永遠不再會看到由于非正常關(guān)機而存儲在磁盤上的垃圾文件。 -
文件系統(tǒng)的速度:盡管使用
ext3
文件系統(tǒng)時,有時在存儲數(shù)據(jù)時可能要多次寫數(shù)據(jù),但是,從總體上看來,ext3
比ext2
的性能還要好一些。這是因為ext3
的日志功能對磁盤的驅(qū)動器讀寫頭進行了優(yōu)化。所以,文件系統(tǒng)的讀寫性能較之ext2
文件系統(tǒng)并來說,性能并沒有降低。 -
數(shù)據(jù)轉(zhuǎn)換:由
ext2
文件系統(tǒng)轉(zhuǎn)換成ext3
文件系統(tǒng)非常容易,只要簡單地鍵入兩條命令即可完成整個轉(zhuǎn)換過程,用戶不用花時間備份、恢復、格式化分區(qū)等。用一個ext3
文件系統(tǒng)提供的小工具tune2fs
,它可以將ext2
文件系統(tǒng)輕松轉(zhuǎn)換為ext3
日志文件系統(tǒng)。另外,ext3
文件系統(tǒng)可以不經(jīng)任何更改,而直接加載成為ext2
文件系統(tǒng)。 -
多種日志模式:
ext3
有多種日志模式,一種工作模式是對所有的文件數(shù)據(jù)及metadata
(定義文件系統(tǒng)中數(shù)據(jù)的數(shù)據(jù),即數(shù)據(jù)的數(shù)據(jù))進行日志記錄(data=journal
模式);另一種工作模式則是只對metadata
記錄日志,而不對數(shù)據(jù)進行日志記錄,也即所謂data=ordered
或者data=writeback
模式。系統(tǒng)管理人員可以根據(jù)系統(tǒng)的實際工作要求,在系統(tǒng)的工作速度與文件數(shù)據(jù)的一致性之間作出選擇。
2. ext4 文件系統(tǒng)介紹
ext4
是第四代擴展文件系統(tǒng)(Fourth extended filesystem,縮寫為 ext4
),它是 Linux 系統(tǒng)下的日志文件系統(tǒng),是 ext3
文件系統(tǒng)的后繼版本。ext4
是由 ext3
的維護者 Theodore Tso
領(lǐng)導的開發(fā)團隊實現(xiàn)的,并引入到 Linux2.6.19 內(nèi)核中。ext4
產(chǎn)生原因是開發(fā)人員在 ext3
中加入了新的高級功能,但在實現(xiàn)的過程出現(xiàn)了一些重要問題:
- 一些新功能違背向后兼容性;
- 新功能使
ext3
代碼變得更加復雜并難以維護; - 新加入的更改使原來十分可靠的
ext3
變得不可靠。
由于上述原因,從 2006 年 6 月份開始,開發(fā)人員決定把 ext4
從 ext3
中分離出來進行獨立開發(fā)。ext4
的開發(fā)工作從那時起開始進行,但大部分 Linux 用戶和管理員都沒有太關(guān)注這件事情,直到 2.6.19 內(nèi)核在 2006 年 11 月的發(fā)布。ext4
第一次出現(xiàn)在主流內(nèi)核里,但是它當時還處于試驗階段,因此很多人都忽視了它。
2008 年 12 月 25 日,Linux Kernel 2.6.28
的正式版本發(fā)布。隨著這一新內(nèi)核的發(fā)布,ext4
文件系統(tǒng)也結(jié)束實驗期,成為穩(wěn)定版。
2.1 ext4 文件系統(tǒng)的特點
-
更大的文件系統(tǒng)和更大的文件:
ext3
文件系統(tǒng)最多只能支持32TB
的文件系統(tǒng)和2TB
的文件,根據(jù)使用的具體架構(gòu)和系統(tǒng)設(shè)置,實際容量上限可能比這個數(shù)字還要低,即只能容納2TB
的文件系統(tǒng)和16GB
的文件。而ext4
的文件系統(tǒng)容量達到1EB
,而文件容量則達到16TB
,這是一個非常大的數(shù)字了。對一般的臺式機和服務器而言,這可能并不重要,但對于大型磁盤陣列的用戶而言,這就非常重要了。 -
更多的子目錄數(shù)量:
ext3
目前只支持32000
個子目錄,而ext4
取消了這一限制,理論上支持無限數(shù)量的子目錄。 -
更多的塊和i-節(jié)點數(shù)量:
ext3
文件系統(tǒng)使用 32 位空間記錄塊數(shù)量和 i-節(jié)點數(shù)量,而ext4
文件系統(tǒng)將它們擴充到64
位。 -
多塊分配:當數(shù)據(jù)寫入到Ext3文件系統(tǒng)中時,Ext3的數(shù)據(jù)塊分配器每次只能分配一個4KB的塊,如果寫一個
100MB
的文件就要調(diào)用25600
次數(shù)據(jù)塊分配器,而Ext4的多塊分配器Multiblock Allocator(MBAlloc)
支持一次調(diào)用分配多個數(shù)據(jù)塊。 -
持久性預分配:如果一個應用程序需要在實際使用磁盤空間之前對它進行分配,大部分文件系統(tǒng)都是通過向未使用的磁盤空間寫入
0
來實現(xiàn)分配,比如P2P
軟件。為了保證下載文件有足夠的空間存放,常常會預先創(chuàng)建一個與所下載文件大小相同的空文件,以免未來的數(shù)小時或數(shù)天之內(nèi)磁盤空間不足導致下載失敗。而ext4
在文件系統(tǒng)層面實現(xiàn)了持久預分配并提供相應的API
,比應用軟件自己實現(xiàn)更有效率。 -
延遲分配:
ext3
的數(shù)據(jù)塊分配策略是盡快分配,而ext4
的策略是盡可能地延遲分配,直到文件在緩沖中寫完才開始分配數(shù)據(jù)塊并寫入磁盤,這樣就能優(yōu)化整個文件的數(shù)據(jù)塊分配,顯著提升性能。 -
盤區(qū)結(jié)構(gòu):
ext3
文件系統(tǒng)采用間接映射地址,當操作大文件時,效率極其低下。例如,一個100MB
大小的文件,在ext3
中要建立25600
個數(shù)據(jù)塊(以每個數(shù)據(jù)塊大小為4KB
為例)的映射表,而ext4
引入了盤區(qū)概念,每個盤區(qū)為一組連續(xù)的數(shù)據(jù)塊,上述文件可以通過盤區(qū)的方式表示為該文件數(shù)據(jù)保存在接下來的 25600 個數(shù)據(jù)塊中
,提高了訪問效率。 -
新的i-節(jié)點結(jié)構(gòu):
ext4
支持更大的i-節(jié)點
。之前的ext3
默認的i-節(jié)
點大小128
字節(jié),ext4
為了在i-節(jié)點
中容納更多的擴展屬性,默認i-節(jié)點
大小為 256 字節(jié)。另外,ext4
還支持快速擴展屬性和i-節(jié)點
保留。 -
日志校驗功能:日志是文件系統(tǒng)最常用的結(jié)構(gòu),日志也很容易損壞,而從損壞的日志中恢復數(shù)據(jù)會導致更多的數(shù)據(jù)損壞。
ext4
給日志數(shù)據(jù)添加了校驗功能,日志校驗功能可以很方便地判斷日志數(shù)據(jù)是否損壞。而且ext4
將ext3
的兩階段日志機制合并成一個階段,在增加安全性的同時提高了性能。 -
支持無日志模式:日志總歸會占用一些開銷。
ext4
允許關(guān)閉日志,以便某些有特殊需求的用戶可以借此提升性能。 -
默認啟用Barrier:磁盤上配有內(nèi)部緩存,以便重新調(diào)整批量數(shù)據(jù)的寫操作順序,優(yōu)化寫入性能,因此文件系統(tǒng)必須在日志數(shù)據(jù)寫入磁盤之后才能寫
Commit
記錄。若Commit
記錄寫入在先,而日志有可能損壞,那么就會影響數(shù)據(jù)完整性。ext4
文件系統(tǒng)默認啟用Barrier
,只有當Barrier
之前的數(shù)據(jù)全部寫入磁盤,才能寫Barrier
之后的數(shù)據(jù)。 -
在線碎片整理:盡管延遲分配、多塊分配和盤區(qū)功能可以有效減少文件的碎片,但碎片還是不可避免會產(chǎn)生。
ext4
支持在線碎片整理,并將提供e4defrag
工具進行個別文件或整個文件系統(tǒng)的碎片整理。 -
支持快速fsck:以前的文件系統(tǒng)版本執(zhí)行
fsck
時很慢,因為它要檢查所有的i-節(jié)點
,而ext4
給每個塊組的i-節(jié)點
表中都添加了一份未使用i-節(jié)點的列表,所以ext4
文件系統(tǒng)做一致性檢查時就可以跳過它們而只去檢查哪些在使用的i-節(jié)點
,從而提高了速度。 -
支持納秒級時間戳:
ext4
之前的擴展文件系統(tǒng)的時間戳都是以秒為單位的,這已經(jīng)能夠應付大多數(shù)設(shè)置,但隨著處理器的速度和集成程度(多核處理器)不斷提升,以及Linux
開始向其他應用領(lǐng)域發(fā)展,它將時間戳的單位提升到納秒。ext4
給時間范圍增加了兩個位,從而讓時間壽命在延長500
年,ext4
的時間戳支持的日期到 2514 年 4 月 25 日,而ext3
只達到 2038 年 1 月 18 日。
3. ReiserFS 文件系統(tǒng)介紹
ReiserFS
是一種新型的文件系統(tǒng),它通過一種與眾不同的方式,完全平衡樹結(jié)構(gòu)來容納數(shù)據(jù),包括文件數(shù)據(jù),文件名以及日志支持。ReiserFS
還以支持海量磁盤和磁盤陣列,并能在上面繼續(xù)保持很快的搜索速度和很高的效率。與 ext2
相比,ReiserFS
有先進的日志 (Journaling/logging
) 功能 機制。日志機制保證了在每個實際數(shù)據(jù)修改之前,相應的日志已經(jīng)寫入硬盤。文件與數(shù)據(jù)的安全性有了很大提高。
3.1 ReiserFS 文件系統(tǒng)的特點
-
高效的磁盤空間利用:
ReiserFS
對一些小文件不分配inode
。而是將這些文件打包,存放在同一個磁盤分塊中。而其它文件系統(tǒng)則為每個小文件分別放置到一個磁盤分塊中。這意味著:如果有10000
個小文件,就要占用10000
個分塊,有點浪費磁盤空間。 -
獨特的搜尋方式:
ReiserFS
基于快速平衡樹 (balanced tree
) 搜索,平衡樹在性能上非常卓越,這是一種非常高效的算法。Reiser
搜索大量文件時,搜索速度要比ext2
快得多。ReiserFS
文件系統(tǒng)使用B*Tree
存儲文件,而其它文件系統(tǒng)使用B+Tree
樹。B*Tree
查詢速度比B+Tree
要快很多。ReiserFS
在文件定位上速度非常快。
在實際運用中,ReiserFS
在處理小于1k
的文件時,比ext2
快 8 到 15 倍,ReiserFS
幾乎在各個方面都優(yōu)于ext2
。 -
支持海量磁盤:
ReiserFS
是一個非常優(yōu)秀的文件系統(tǒng),可輕松管理上百G
的文件系統(tǒng),ReiserFS
文件系統(tǒng)最大支持的文件系統(tǒng)尺寸為16TB
。這非常適合企業(yè)級應用中。 -
優(yōu)異的性能:由于它的高效存儲和快速小文件
I/O
特點,使用ReiserFS
文件系統(tǒng)的PC
,在啟動X
窗口系統(tǒng)時,所花的時間要比在同一臺機器上使用ext2
文件系統(tǒng)少1/3
。另外,ReiserFS
文件系統(tǒng)支持單個文件尺寸為4G
的文件,這為大型數(shù)據(jù)庫系統(tǒng)在linux
上的應用提供了更好的選擇。 -
搜尋方式:
ReiserFS
是基于平衡樹 (STree
) 的文件系統(tǒng)結(jié)構(gòu),尤其對于大量文件的巨型文件系統(tǒng),如服務器上的文件系統(tǒng),搜索速度要比ext2
快,ext2
使用局部的二分查找法,綜合性能比不上ReiserFS
。在Reiser4
中還運用了文件即是目錄的設(shè)計來管理meta-data
,并且運用了Hans Reiser
自己發(fā)明的Dancing B-tree
,效率提升非常明顯。 -
空間分配和利用情況:
ReiserFS
里的目錄是完全動態(tài)分配的,因此不存在ext2
中常見的無法回收巨型目錄占用的磁盤空間的情況。ReiserFS
里小文件(< 4K
)可以直接存儲進樹,小文件讀取和寫入的速度更快,樹內(nèi)節(jié)點是按字節(jié)對齊的,小的文件可共享同一個硬盤塊,節(jié)約大量空間。ext2
使用固定大小的塊分配策略,也就是說,不到4K
的小文件也要占據(jù)4K的空間,導致的空間浪費比較嚴重。 -
缺點:出現(xiàn)異常斷電的時候,會出現(xiàn)大量的未寫入完全的數(shù)據(jù)。
ReiserFS
會在恢復的時候進行rebuild-tree
。而這個過程是非常慢的。在ReiserFS
的升級版本Reiser4
中有所改觀。
3.2 ReiserFS 與 ext3 的比較
從技術(shù)層面來講兩者文件系統(tǒng)有很大的不同,但對于很多人來說,關(guān)注其中幾點即可:
-
第一,是你可以很方便地從
ext2
格式進行升級,因為到目前為止,很多Linux
發(fā)行套件仍然在使用這種文件系統(tǒng)。 -
第二,就是
ext3
不僅可以記錄數(shù)據(jù)日志(這在ext2
中就已經(jīng)具備),而且在此基礎(chǔ)上還可以記錄元數(shù)據(jù) (Metadata
)日志。現(xiàn)在的ReiserFS
則只有日志元數(shù)據(jù)。 -
第三,就是文件系統(tǒng)的可擴展性。在介紹第三點以前,讓我們先來看一看前兩個不同點,因為第三點值得我們特別關(guān)注。就
ext3
來說,它可以方便地從ext2
文件系統(tǒng)進行升級轉(zhuǎn)換是其一大優(yōu)勢。當然,對于一直使用ReiserFS
的人來說,這沒有什么意義。但是,大多數(shù)用戶并不愿意嘗試使用ext3
以外的任何一種日志文件系統(tǒng)。原因很簡單,把ext2
轉(zhuǎn)換到ext3
要比轉(zhuǎn)換成其它任何一種文件系統(tǒng)更簡單、快捷。
4. JFS 文件系統(tǒng)介紹
JFS
( JOURNAL FILE SYSTEM
),一種字節(jié)級日志文件系統(tǒng),借鑒了數(shù)據(jù)庫保護系統(tǒng)的技術(shù),以日志的形式記錄文件的變化。JFS通過記錄文件結(jié)構(gòu)而不是數(shù)據(jù)本身的變化來保證數(shù)據(jù)的完整性。這種方式可以確保在任何時刻都能維護數(shù)據(jù)的可訪問性。
4.1 JFS 體系結(jié)構(gòu)和設(shè)計
-
體系結(jié)構(gòu)和設(shè)計,
JFS
體系結(jié)構(gòu)可從磁盤布局特性的角度進行說明。 -
邏輯,卷所有文件系統(tǒng)討論的基礎(chǔ)是某種類型的邏輯卷。
-
聚集和文件集,文件系統(tǒng)創(chuàng)建實用程序
mkfs
,創(chuàng)建了完全包含在分區(qū)內(nèi)的聚集。聚集是包含一種特定格式的磁盤塊陣列,其格式包括超級塊和分配映射表。超級塊將分區(qū)標識成JFS
聚集,而分配映射表描述聚集內(nèi)每個數(shù)據(jù)塊的分配狀態(tài)。格式還包括描述它所必需的初始文件集和控制結(jié)構(gòu)。文件集是可安裝的實體。 -
文件、目錄、inode 與尋址結(jié)構(gòu),文件集包含文件和目錄。文件和目錄由
inode
持續(xù)表示,每個inode
描述文件或目錄的屬性,并作為查找磁盤上文件或目錄數(shù)據(jù)的起始點。JFS
還使用inode
來表示其它文件系統(tǒng)對象,如描述文件集中每個inode
的分配狀態(tài)和磁盤位置的映射表。目錄將用戶特定的名稱映射到為文件和目錄所分配的inode
上,并且形成傳統(tǒng)的命名層次。文件包含用戶數(shù)據(jù),用戶數(shù)據(jù)中沒有隱含任何限制或格式。也就是說,JFS
將用戶數(shù)據(jù)看成是未解釋的字節(jié)流。根植于inode
基于盤區(qū)的尋址結(jié)構(gòu)用來將文件數(shù)據(jù)映射到磁盤。聚集超級塊和磁盤分配映射表、文件描述符和inode
映射表、inode
、目錄以及尋址結(jié)構(gòu)一起表示了JFS
控制結(jié)構(gòu)或元數(shù)據(jù)。 -
日志,在每個聚集中維護
JFS
日志,并且用來記錄元數(shù)據(jù)的操作信息。日志有一種同樣由文件系統(tǒng)創(chuàng)建實用程序設(shè)置的格式。聚集內(nèi)多個安裝的文件集可以同時使用一個日志。
5. XFS 文件系統(tǒng)介紹
XFS
一種高性能的日志文件系統(tǒng),最早于 1993 年,由 Silicon Graphics
為他們的 IRIX
操作系統(tǒng)而開發(fā),是 IRIX 5.3
版的默認文件系統(tǒng)。2000 年 5 月,Silicon Graphics
以 GNU
通用公共許可證發(fā)布這套系統(tǒng)的源代碼,之后被移植到 Linux
內(nèi)核上。XFS
特別擅長處理大文件,同時提供平滑的數(shù)據(jù)傳輸。SGI
發(fā)現(xiàn)他們的現(xiàn)有文件系統(tǒng)(existing filesystem,EFS
)正在迅速變得不適應當時激烈的計算競爭。為解決這個問題,SGI
決定設(shè)計一種全新的高性能 64 位文件系統(tǒng),而不是試圖調(diào)整 EFS
在先天設(shè)計上的某些缺陷。因此,XFS
誕生了,并于 1994 年隨 IRIX 5.3
的發(fā)布而應用于計算。
5.1 XFS 文件系統(tǒng)的特點
-
數(shù)據(jù)完全性,采用
XFS
文件系統(tǒng),當意想不到的宕機發(fā)生后,首先,由于文件系統(tǒng)開啟了日志功能,所以你磁盤上的文件不再會意外宕機而遭到破壞了。不論目前文件系統(tǒng)上存儲的文件與數(shù)據(jù)有多少,文件系統(tǒng)都可以根據(jù)所記錄的日志在很短的時間內(nèi)迅速恢復磁盤文件內(nèi)容。 -
傳輸特性,
XFS
文件系統(tǒng)采用優(yōu)化算法,日志記錄對整體文件操作影響非常小。XFS
查詢與分配存儲空間非常快。XFS
文件系統(tǒng)能連續(xù)提供快速的反應時間。筆者曾經(jīng)對XFS
、JFS
、Ext3
、ReiserFS
文件系統(tǒng)進行過測試,XFS
文件文件系統(tǒng)的性能表現(xiàn)相當出眾。 -
可擴展性,
XFS
是一個全64-bit
的文件系統(tǒng),它可以支持上百萬T
字節(jié)的存儲空間。對特大文件及小尺寸文件的支持都表現(xiàn)出眾,支持特大數(shù)量的目錄。最大可支持的文件大 小為263 = 9 x 1018 = 9 exabytes
,最大文件系統(tǒng)尺寸為18 exabytes
。XFS
使用高的表結(jié)構(gòu)(B+
樹),保證了文件系統(tǒng)可以快速搜索與快速空間分配。XFS
能夠持續(xù)提供高速操作,文件系統(tǒng)的性能不受目錄中目錄及文件數(shù)量的限制。 -
傳輸帶寬,
XFS
能以接近裸設(shè)備I/O
的性能存儲數(shù)據(jù)。在單個文件系統(tǒng)的測試中,其吞吐量最高可達7GB
每秒,對單個文件的讀寫操作,其吞吐量可達4GB
每秒。
5.2 XFS 文件系統(tǒng)的缺點
歷史上 XFS
上的元數(shù)據(jù)操作曾比其它文件系統(tǒng)都慢,表現(xiàn)為在刪除大量小文件時性能糟糕。該性能問題是被 Red Hat
的 XFS
開發(fā)者 Dave Chinner
在代碼中定位到的。使用一個叫 “延遲記錄” 的掛載選項可以成數(shù)量級地提升元數(shù)據(jù)操作的性能。該選項幾乎把日志整個存在內(nèi)存中。Linux
內(nèi)核主線版本 2.6.35
中作為一個試驗性特性引入了這個補丁,在 2.6.37
中使它成為了一個穩(wěn)定的特性,并計劃在 2.6.39
中把它作為默認的日志記錄方法。早期測試顯示在有少量線程的環(huán)境中其性能接近 EXT4
,在大量線程的環(huán)境下超過了 EXT4
。
6. 小結(jié)
本小節(jié)介紹了 ext3
、ext4
、ReiserFS
、JFS
、XFS
日志相關(guān)的文件系統(tǒng)的特點,日志文件系統(tǒng)為 Linux 系統(tǒng)增加了一層安全性,熟悉這些文件系統(tǒng)之后,你就知道了 Linux 系統(tǒng)中有多個文件系統(tǒng),除了默認使用的文件系統(tǒng)之外,還有可供選的文件系統(tǒng)。