rbd 是 ceph 的塊儲存方案,最近需要在一台 linux 伺服器上掛載 ceph 映象,做法和 kubernetes 掛 rbd 很像,但部分操作由於 kubernetes 在映象中已經固化了,所以將這次完全自己控制的步驟記錄下來,加深對 ceph 掛載的理解。
要掛載 rbd 磁碟的 linux 伺服器首先要有 ceph 的客戶端,也就是 rbd 的客戶端,以及一些 rbd 專用的 kernel module,畢竟這是要通過網路走特定的協議來完成的磁碟掛載,和本地直接 mount 還是有差別的。
安裝過程並不複雜,因為環境中已經有了 ceph 集群,從 ceph 集群中的主節點使用 ceph-deploy 擴充套件新節點即可,就不再描述如何安裝 ceph 了。
# on linux client
$ echo "all = (root) nopasswd:all" | sudo tee /etc/sudoers.d/$ sudo chmod 0440 /etc/sudoers.d/$ sudo apt-get install -y python
# on ceph master
$ ceph-deploy install $ ceph-deploy admin
上一步,已經在要掛載 rbd 的 linux 伺服器上安裝好了 ceph,接下來的操作在要掛載 ceph rbd 磁碟的 linux 伺服器上操作即可。
首先為這個磁碟單獨建立乙個儲存池,並指定該儲存池作為 rbd 使用
$ sudo ceph osd pool create 50 50 # 兩個 50 指定的 pg 和 pgp 的數量
然後建立磁碟,下面這個命令建立了乙個 1t 大小的磁碟,image-feature 引數指定的是 rbd 映象的功能特性,很多功能特性只有高版本的 linux kernel 才支援,甚至有些都沒有 kernel 版本支援,所以只開啟最基本的 layering 即可。
$ sudo rbd create /--size 1t --image-feature=layering
接下來為了將遠端的 rbd 磁碟掛載到本地,需要將其對映到本地的碟符上。
$ sudo rbd map /
雖然已經關掉了大部分的 rbd 功能特性,結果還是報錯了:
libceph: ... feature set mismatch, my 107b84a842aca < server's 40107b84a842aca, missing 400000000000000
接下來讓我們看看missing 400000000000000是個什麼意思。400000000000000是乙個二進位制的字串,每乙個位元位對應乙個 rbd 的功能特性,每個位元標識什麼意思詳見下表,表中還標出了支援該特性的核心版本,400000000000000對應的特性是ceph_feature_new_osdopreply_encoding,核心是從 4.5 開始支援的,而這次用的 linux 系統是 ubuntu 16.04,核心版本為 4.4,所以才會報出這個問題。
feature
bitoct
3.83.9
3.10
3.14
3.15
3.18
4.14.5
4.6ceph_feature_nosrcaddr12
rrrr
rrrr
rceph_feature_subscribe2410
-r-ceph_feature_reconnect_seq640
-r-rrr
rrrceph_feature_pgid64
9200rr
rrrr
rrceph_feature_pgpool3
11800rr
rrrr
rrceph_feature_osdenc
132000rr
rrrr
rrceph_feature_crush_tunables
1840000ss
ssss
sssceph_feature_msg_auth
23800000
-s-sss
ceph_feature_crush_tunables2
252000000ss
ssss
ssceph_feature_reply_create_inode
278000000ss
ssss
ssceph_feature_osdhashpspool
3040000000ss
ssss
ssceph_feature_osd_cachepool
35800000000
-s-sss
ssceph_feature_crush_v2
361000000000
-s-sss
ssceph_feature_export_peer
372000000000
-s-sss
ssceph_feature_osd_erasure_codes***
384000000000
ceph_feature_osdmap_enc
398000000000
-s-sss
sceph_feature_crush_tunables3
4120000000000
-s-sss
sceph_feature_osd_primary_affinity
41*20000000000
-s-sss
sceph_feature_crush_v4 ****
481000000000000
-s-s
sceph_feature_crush_tunables5
58200000000000000
-s-s
ceph_feature_new_osdopreply_encoding
58*400000000000000
-s-s
解決這個問題,可以有兩種方法,第一種是公升級 kernel,第二種方法是降級 ceph 的 crush 演算法,本文採用的是第二種方法,因為公升級第二種方法操作起來更簡單,風險也更低,一條命令即可:
$ sudo ceph osd crush tunables legacy
對映操作現在可以成功了!
$ sudo rbd map //dev/rbd0
接下來的操作和掛載乙個本地磁碟就沒有任何區別了:
$ sudo mkfs.ext4 /dev/rbd0
$ sudo mkdir /data
$ sudo mount /dev/rbd0 /data/
讓我們看看掛載的結果吧。
$ lsblk
name maj:min rm size ro type mountpoint
sda 8:0 0 893.8g 0 disk
|-sda1 8:1 0 476m 0 part /boot
|-sda2 8:2 0 119.2g 0 part [swap]
`-sda3 8:3 0 774.1g 0 part /
rbd0 251:0 0 1t 0 disk /data
linux遠端掛載 NFS
rw 可讀寫的許可權 ro 唯讀的許可權 no root squash 登入nfs主機,使用該共享目錄時相當於該目錄的擁有者,如果是root的話,那麼對於這個共享的目錄來說,他就具有root的權 限,這個引數 極不安全 不建議使用 root squash 登入nfs主機,使用該共享目錄時相當於該目錄...
Linux掛載遠端目錄
posted by tian on november 14,2018 我的程式和資料都部署在103伺服器上,有一天,我終於實現了乙個想法,興沖沖地想執行看看,但是一看103顯示卡被佔滿了,而且同事要訓練很多天,那怎麼辦,等他訓練完?等?等是不可能等的。我一看,102伺服器現在還空著,馬不停蹄地開始往...
linux nfs 遠端掛載
1.linux服務端 install nfs server sudo apt get install nfs kernel server open etc exports file vi etc exports add the lines home root nfsroot rw,sync,no r...