1. 程式人生 > 其它 >(原)檢視cephfs中的元資料物件和資料物件資訊

(原)檢視cephfs中的元資料物件和資料物件資訊

此篇的除錯資訊和內容主要參考大神https://blog.csdn.net/a1454927420/article/details/79381134的這篇文章,進行驗證。

在繼上一篇,單機上利用docker部署ceph叢集環境搭建筆記之後,我們來看一下cephfs的元資料和資料物件資訊:

# 16、ceph -s命令解釋
當我們執行ceph -s的時候,其實ceph -s的全稱是:
ceph \
--name client.admin \
--keyring /etc/ceph/ceph.client.admin.keyring \
--conf /etc/ceph/ceph.conf
--cluster ceph \
-s

上面引數很好理解,Ceph內部自身使用CephX進行認證,和普通的認證沒什麼區別,同樣需要使用者名稱和密碼進行認證,那麼這裡預設的使用者名稱就叫做client.admin,而預設的祕鑰儲存位置就位於以下幾個位置任一:

/etc/ceph/ceph.client.admin.keyring
/etc/ceph/ceph.keyring
/etc/ceph/keyring
/etc/ceph/keyring.bin
一般我們選擇第一個,因為祕鑰的命名規則採用/etc/ceph/$cluster.$name.keyring也就是叢集名加上使用者名稱再加上keyring的字尾組成。所以在我們執行ceph -s的時候,預設使用的是client.admin使用者,同時會去那四個預設位置搜尋該使用者的祕鑰,如果和叢集儲存的認證資訊一致,那麼就會顯示出叢集的狀態。

因為我們上面在進行docker部署的時候,這些祕鑰資訊,是用的/www/這個目錄,所以我們如果想要簡單的執行ceph -s,就需要將/www/ceph/*目錄下的祕鑰檔案拷貝到/etc/ceph目錄下來;


# 17、檢視cephfs檔案系統的元資料

當我們建立完cephfs以後(執行完步驟11以後),我們來看一下元資料池中儲存的元資料:
root@ybelzjlpa9xmngcb-0315223:~/ceph_cluster/mycephfs# rados ls -p cephfs_metadata
2021-10-26 11:14:17.865896 7f57437be700 0 monclient: hunting for new mon
mds0_openfiles.0
609.00000000
mds0_sessionmap
mds_snaptable
608.00000000
400.00000000
601.00000000
602.00000000
600.00000000
603.00000000
mds0_inotable
100.00000000
1.00000000.inode
200.00000000
200.00000001
606.00000000
604.00000000
500.00000000
607.00000000
605.00000000
100.00000000.inode
1.00000000
root@ybelzjlpa9xmngcb-0315223:~/ceph_cluster/mycephfs#

上面的展示的元資料為一個初創檔案系統的元資料相關物件。
由此可知,當我們在建立cephfs檔案系統後,即使不往檔案系統裡面寫資料,他也是會存在一些物件資料的,這部分物件儲存的就是檔案系統本身的元資料,對應於我們常說的superblock,根目錄的元資料,等相關資訊。

這些物件裡除了儲存了檔案系統的元資料,還用做儲存cephfs日誌,日誌是用來恢復mds裡的元資料快取,和還沒有應用成物件的元資料。


然後我們在掛載的目錄下,建立一個新的目錄:

root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# mkdir test_dir

然後再檢視下檔案系統的元資料:

root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
2021-10-26 14:13:55.415477 7fc62defc700 0 monclient: hunting for new mon
mds0_openfiles.0
609.00000000
mds0_sessionmap
mds_snaptable
608.00000000
400.00000000
601.00000000
602.00000000
600.00000000
603.00000000
mds0_inotable
100.00000000
1.00000000.inode
200.00000000
200.00000001
606.00000000
604.00000000
500.00000000
607.00000000
605.00000000
100.00000000.inode
1.00000000
//在檢視一下建立目錄的inode號:
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# ll -i
total 5
1 drwxr-xr-x 1 root root 0 Oct 26 14:13 ./
915713 drwxr-xr-x 3 root root 4096 Oct 26 10:47 ../
1099511627776 drwxr-xr-x 1 root root 0 Oct 26 14:13 test_dir/
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

可以看到test_dir目錄的inode號為1099511627776;然後他的hex為100 0000 0000;

然後再來看一下metadata中儲存的元資料:
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
2021-10-26 14:27:36.970190 7f21be598700 0 monclient: hunting for new mon
mds0_openfiles.0
609.00000000
mds0_sessionmap
mds_snaptable
608.00000000
400.00000000
601.00000000
602.00000000
10000000000.00000000
600.00000000
603.00000000
mds0_inotable
100.00000000
1.00000000.inode
200.00000000
200.00000001
606.00000000
604.00000000
500.00000000
607.00000000
605.00000000
100.00000000.inode
1.00000000
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

可以看到多了一個10000000000.00000000的物件,這個物件就是我們剛剛建立的目錄的test_dir的元資料物件,物件的名稱為檔案的inode號.偏移值,其中偏移值是在核心裡切割檔案時給出的。(具體怎麼切割和傳送資料的,且聽下回分解)

然後我們再在test_dir目錄下建立一個空檔案:
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# cd test_dir/
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# ls
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir#
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# touch test_file
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# ll -i
total 1
1099511627776 drwxr-xr-x 1 root root 0 Oct 26 14:35 ./
1 drwxr-xr-x 1 root root 0 Oct 26 14:13 ../
1099511627777 -rw-r--r-- 1 root root 0 Oct 26 14:35 test_file
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir#


然後看下這個檔案的元資料資訊:
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# rados ls -p cephfs_metadata
2021-10-26 14:36:16.600448 7fc7e539a700 0 monclient: hunting for new mon
mds0_openfiles.0
609.00000000
mds0_sessionmap
mds_snaptable
608.00000000
400.00000000
601.00000000
602.00000000
10000000000.00000000
600.00000000
603.00000000
mds0_inotable
100.00000000
1.00000000.inode
200.00000000
200.00000001
606.00000000
604.00000000
500.00000000
607.00000000
605.00000000
100.00000000.inode
1.00000000
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir#

並沒有新的元資料物件生成,即使我們上去到mds的伺服器容器上強制重新整理元資料:
[root@dd2f52aeb014 /]# ceph daemon /run/ceph/ceph-mds.dd2f52aeb014.asok flush journal
{
"message": "",
"return_code": 0
}
然後在看元資料物件資訊,還是一樣的,跟之前,如下:
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
2021-10-26 14:39:09.128725 7f7a3673f700 0 monclient: hunting for new mon
mds0_openfiles.0
609.00000000
mds0_sessionmap
mds_snaptable
608.00000000
400.00000000
601.00000000
602.00000000
10000000000.00000000
600.00000000
603.00000000
mds0_inotable
100.00000000
1.00000000.inode
200.00000000
200.00000001
606.00000000
604.00000000
500.00000000
607.00000000
605.00000000
100.00000000.inode
1.00000000
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

然後再建立一個test_dir2目錄,然後再看下元資料資訊:
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# cd ..
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# mkdir test_dir2
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# ll -i
total 6
1 drwxr-xr-x 1 root root 0 Oct 26 14:38 ./
915713 drwxr-xr-x 3 root root 4096 Oct 26 10:47 ../
1099511627776 drwxr-xr-x 1 root root 0 Oct 26 14:35 test_dir/
1099511627778 drwxr-xr-x 1 root root 0 Oct 26 14:38 test_dir2/
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
2021-10-26 14:39:19.046819 7ff75423c700 0 monclient: hunting for new mon
mds0_openfiles.0
609.00000000
mds0_sessionmap
mds_snaptable
608.00000000
400.00000000
601.00000000
602.00000000
10000000000.00000000
600.00000000
603.00000000
10000000002.00000000
mds0_inotable
100.00000000
1.00000000.inode
200.00000000
200.00000001
606.00000000
604.00000000
500.00000000
607.00000000
605.00000000
100.00000000.inode
1.00000000
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

可見,我們可以看到test_dir2和test_dir目錄的元資料,但是看不到test_dir/test_file檔案的元資料。
參考(https://blog.csdn.net/a1454927420/article/details/79381134)部落格的說法:
因為檔案沒有下級目錄,所以沒必要單獨弄一個物件來儲存元資料,只需要儲存在上級目錄的元資料裡面

那麼我們來看下test_file的上級目錄test_dir目錄的元資料物件資訊:
執行命令:
rados -p cephfs_metadata listomapvals 10000000000.00000000

元資料物件資訊:
root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados -p cephfs_metadata listomapvals 10000000000.00000000
2021-10-26 14:46:24.565441 7fd6eb8de700 0 monclient: hunting for new mon
test_file_head
value (488 bytes) :
00000000 02 00 00 00 00 00 00 00 69 02 01 d9 01 00 00 00 |........i.......|
00000010 00 00 00 06 04 cf 01 00 00 11 06 ad 01 00 00 01 |................|
00000020 00 00 00 00 01 00 00 00 00 00 00 b5 a1 77 61 07 |.............wa.|
00000030 5b af 31 a4 81 00 00 00 00 00 00 00 00 00 00 01 |[.1.............|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 02 02 18 00 |................|
00000050 00 00 00 00 40 00 01 00 00 00 00 00 40 00 05 00 |....@.......@...|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000070 00 00 01 00 00 00 ff ff ff ff ff ff ff ff 00 00 |................|
00000080 00 00 00 00 00 00 00 00 00 00 b5 a1 77 61 31 8d |............wa1.|
00000090 7b 31 b5 a1 77 61 31 8d 7b 31 01 00 00 00 00 00 |{1..wa1.{1......|
000000a0 00 00 03 02 28 00 00 00 00 00 00 00 00 00 00 00 |....(...........|
000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000000d0 03 02 38 00 00 00 00 00 00 00 00 00 00 00 00 00 |..8.............|
000000e0 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 |................|
000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000100 00 00 00 00 00 00 b5 a1 77 61 07 5b af 31 03 02 |........wa.[.1..|
00000110 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |8...............|
00000120 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000140 00 00 00 00 b5 a1 77 61 07 5b af 31 04 00 00 00 |......wa.[.1....|
00000150 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
00000160 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 |................|
00000170 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff |................|
00000180 00 00 00 00 01 01 10 00 00 00 00 00 00 00 00 00 |................|
00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b5 a1 |................|
000001b0 77 61 c8 fb f4 2a 00 00 00 00 00 00 00 00 ff ff |wa...*..........|
000001c0 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 fe ff ff ff |................|
000001e0 ff ff ff ff 00 00 00 00 |........|
000001e8

root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

我們可以看到test_dir目錄的物件裡儲存了子目錄和子檔案的名稱和inode編號(注意:因為linux是小端模式,看記憶體資料得倒著看),這樣就可以建立一個檔案系統數的元資料對應關係。