$0指的就是mkcephfsui
1. 校驗conf文件,並建立隨機的臨時目錄:spa
dir = /tmp/mkcephfs.jYWWOaxaTaseo
2 .執行 :$0 --prepare-monmap -d $dir -c $confget
1) 獲得mon列表、mon的id以及mon的地址 :cmd
mons=`$CCONF -c $conf -l mon | egrep -v '^mon$' | sort`it
id=`echo $name | cut -c 4- | sed 's/^\\.//'`test
get_conf addr "" "mon addr"import
那麼args:args = --add 0 192.168.100.61:6789cli
2) 在$dir/monmap中建立monmapsed
$BINDIR/monmaptool --create --clobber $args --print $monmap || exit 1
在此之中,生成了fsid,並將 epoch 0 寫入 /tmp/mkcephfs.jYWWOaxaTa/monmap
3) 複製ceph.conf文件:
cp $conf $dir/conf
至此,$0 --prepare-monmap -d $dir -c $conf 命令執行結束。
3. 只取出osd_list和mds_lilst組成name_list, 遍歷name_llist並執行:
1)若是爲遠程主機,那麼先調用scp推送conf 和monmap 到遠程主機的臨時目錄 $host:$rdir:
rdir=`mktemp -u /tmp/mkfs.ceph.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
2)do_root_cmd "$0 -d $rdir --init-daemon $name"
s1. 檢查/var/run/ceph/$name.pid和/var/run/ceph/$name.asok,並建立相應的目錄
s2 .若是$name的$type爲osd,則:
$BINDIR/ceph-osd -c $conf --monmap $dir/monmap -i $id --mkfs --mkkey
get_conf osd_data "/var/lib/ceph/osd/ceph-$id" "osd data"
get_conf osd_keyring "$osd_data/keyring" "keyring"
$BINDIR/ceph-authtool -p -n $name $osd_keyring > $dir/key.$name
s3. 若是$type爲mds,則:
get_conf mds_data "/var/lib/ceph/mds/ceph-$id" "mds data"
get_conf mds_keyring "$mds_data/keyring" "keyring"
test -d $mds_data || mkdir -p $mds_data
echo "creating private key for $name keyring $mds_keyring"
$BINDIR/ceph-authtool --create-keyring --gen-key -n $name $mds_keyring
$BINDIR/ceph-authtool -p -n $name $mds_keyring > $dir/key.$name
3) 若是帶有--mkfs參數,那麼同時格式化分區
do_root_cmd "$0 -d $rdir --prepare-osdfs $name"
4)若是爲遠程主機,從遠程節點收集keys
scp -q $host:$rdir/key.$name $dir
4. 準備monitors,執行$0 -d $dir --prepare-mon $moreargs :
此時,moreargs已經包含了更多參數:numosd osdmap crushmapsrc crushmap
1)若是useosdmap不爲空,那麼使用useosdmap:cp $useosdmap $dir/osdmap,不然根據conf文件建立通用的osdmap:
$BINDIR/osdmaptool --create-from-conf $dir/osdmap -c $conf
2) 獲得crushmapsrc :
get_conf crushmapsrc "" "crush map src" mon global
若是$crushmapsrc不爲空,則根據crushmapsrc獲得一個map文件,保存爲$dir/crushmap:
$BINDIR/crushtool -c $crushmapsrc -o $dir/crushmap
3)獲得crushmap:
get_conf crushmap "$usecrushmap" "crush map" mon global
若是$crushmap 不爲空,則將$crushmap導入到$dir/crushmap:
$BINDIR/osdmaptool --import-crush $crushmap $dir/osdmap
4)產生admin keyring,保存到$dir/keyring.admin:
$BINDIR/ceph-authtool --create-keyring --gen-key -n client.admin $dir/keyring.admin
5)建立初始的monitor keyring:
s1. cp $dir/keyring.admin $dir/keyring.mon
s2. $BINDIR/ceph-authtool -n client.admin --set-uid=0 \
--cap mon 'allow *' \
--cap osd 'allow *' \
--cap mds 'allow' \
$dir/keyring.mon
s3. $BINDIR/ceph-authtool --gen-key -n mon. $dir/keyring.mon --cap mon 'allow *'
6) 遍歷$dir/key.*:
若是ktype爲osd:
$BINDIR/ceph-authtool -n $kname --add-key $secret $dir/keyring.mon \
--cap mon 'allow rwx' \
--cap osd 'allow *'
若是type爲mds:
$BINDIR/ceph-authtool -n $kname --add-key $secret $dir/keyring.mon \
--cap mon "allow rwx" \
--cap osd 'allow *' \
--cap mds 'allow'
5.遍歷mon_list,並執行:
1)推送配置文件
若是爲遠程主機,先推送本地的$dir/* 到$rdir :
rdir=`mktemp -u /tmp/mkfs.ceph.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
不然若是是本地主機,則cp $dir/conf /etc/ceph/ceph.conf
2)開始啓動mon daemon:
do_root_cmd "$0 -d $rdir --init-daemon $name"
s1. 檢查/var/run/ceph/$name.pid和/var/run/ceph/$name.asok,並建立相應的目錄
s2.此時 $type爲mon,則:
get_conf mon_data "/var/lib/ceph/mon/ceph-$id" "mon data"
mkdir -p "$mon_data"
$BINDIR/ceph-mon -c $conf --mkfs -i $id --monmap $dir/monmap --osdmap $dir/osdmap -k $dir/keyring.mon
6 .獲得adminkerying:
get_conf adminkeyring "/etc/ceph/keyring" "keyring" global
cp $dir/keyring.admin $adminkeyring