PG
一個 Pool 中有多個 PG,具體數量可以通過以下命令查看:
ceph osd pool get test pg_num
查看 Pool 中 PG 的分布:
ceph pg ls-by-pool test
查看對象的位置:
ceph osd map test test-object osdmap e264282 pool 'test' (4) object 'test-object' -> pg 4.bf8f6aea (4.a) -> up ([1,0,2], p1) acting ([1,0,2], p1)
【解釋】test-object 是對象名,test 是 pool。
- osdmap e264282 是 osdmap 的版本號
- pool 'test' (4) 是 pool 名字及 ID
- object 'test-object' 是對象名稱
- pg 4.bf8f6aea (4.a) 是對象所在 PG 的編號
結果顯示這個對象在 ID 為 4.a 的 PG 上,並且位於 OSD1,OSD0,OSD2 上,三個副本。
查看 pg 中有哪些對象:
$ rados --pgid 4.a ls
像 Pool,PG 這些東西都是有 id 的,查看 Pool 的 ID:
ceph osd lspools
我這里名為 test 的 pool 的 ID 為 4,所以 test 下面的 PG 的 ID 都是以 4 開頭的。
查看pg和osd的映射關系:
ceph pg dump | grep ^4. |awk '{print $1 "\t" $17 "\t" $10}'
查看pg狀態:
ceph pg dump pgs_brief
獲取pg數量
ceph osd pool get {pool-name} pg_num
c存儲池相關pg信息
ceph pg dump pools
查看pg和osd的映射關系:osd為主
ceph pg dump osds
手動觸發peering
pg repeer pg repeer <pgid>
要檢索特定放置組的統計信息,請執行以下操作:
ceph pg {pg-id} query
這里的query其實是一種元數據信息,部分形式如下:

1 { 2 "snap_trimq": "[]", 3 "snap_trimq_len": 0, 4 "state": "active+clean", 5 "epoch": 236, 6 "up": [ 7 1, 8 2, 9 0 10 ], 11 "acting": [ 12 1, 13 2, 14 0 15 ], 16 "acting_recovery_backfill": [ 17 "0", 18 "1", 19 "2" 20 ], 21 "info": { 22 "pgid": "1.0", 23 "last_update": "223'23", 24 "last_complete": "223'23", 25 "log_tail": "0'0", 26 "last_user_version": 23, 27 "last_backfill": "MAX", 28 "purged_snaps": [], 29 "history": { 30 "epoch_created": 2, 31 "epoch_pool_created": 2, 32 "last_epoch_started": 221, 33 "last_interval_started": 220, 34 "last_epoch_clean": 221, 35 "last_interval_clean": 220, 36 "last_epoch_split": 0, 37 "last_epoch_marked_full": 0, 38 "same_up_since": 220, 39 "same_interval_since": 220, 40 "same_primary_since": 212, 41 "last_scrub": "189'21", 42 "last_scrub_stamp": "2020-12-14T06:56:57.181447+0800", 43 "last_deep_scrub": "189'20", 44 "last_deep_scrub_stamp": "2020-12-13T04:09:17.431508+0800", 45 "last_clean_scrub_stamp": "2020-12-14T06:56:57.181447+0800", 46 "prior_readable_until_ub": 0 47 }, 48 ... 49 }
我們可以看到很多理論部分講過的元數據,比如 up 、acting、info、epoch、peer、interval等。snap_trimq
表示快照刪除隊列。
【獲取pg map】要獲取特定放置組的放置組映射,請執行以下操作:
ceph pg map {pg-id}
例如:
ceph pg map 1.6c
Ceph將返回放置組圖,放置組和OSD狀態:
osdmap e13 pg 1.6c (1.6c) -> up [1,0] acting [1,0]
解釋一下,這里表示 pg 1.6c被映射到 編號為 [1,0]的兩個OSD上。 Acting 表示Acting Set。
Scrub擦洗
關於Scrub的含義,我們在《Ceph糾刪碼部署》已經介紹了,Scrub指數據掃描,通過讀取對象數據並重新計算校驗和,再與之前存儲在對象屬性的校驗和進行比對,以判斷有無靜默錯誤(磁盤自身無法感知的錯誤)。要Scrub,請執行以下操作:
ceph pg scrub {pg-id}
Ceph檢查主節點和任何副本節點,生成放置組中所有對象的目錄並進行比較,以確保沒有丟失或不匹配的對象,並且它們的內容一致。假設所有副本都匹配,則最終的語義掃描可確保所有與快照相關的對象元數據都是一致的。通過日志報告錯誤。
要從特定池中清理所有放置組,請執行以下操作:
ceph osd pool scrub {pool-name}