Linux 遠端掛載 Ceph RBD 磁碟

2021-09-20 00:07:37 字數 3887 閱讀 3584

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...