溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

tgt服務(wù)端流程是怎樣的

發(fā)布時(shí)間:2021-12-28 15:53:15 來(lái)源:億速云 閱讀:181 作者:柒染 欄目:云計(jì)算

tgt服務(wù)端流程是怎樣的,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

整體流程

tgt服務(wù)端流程是怎樣的

Figure1 tgt流程圖

基本操作

安裝tgt包:

yum --enablerepo=epel -y install scsi-target-utils

安裝完成后,啟動(dòng) TGT 服務(wù):

# service tgtd start

如果想在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng) TGT 服務(wù),可以使用如下命令:

# chkconfig tgtd on

如果想確認(rèn) TGT 服務(wù)是否啟動(dòng),可以用 # servicetgtd status 查看服務(wù)狀態(tài);當(dāng)然,也可以查詢 TGT 服務(wù)占用的端口:

# netstat -anlpt | grep 3260

其中,3260 是 TGT 服務(wù)的監(jiān)聽(tīng)端口。結(jié)果如下:

創(chuàng)建Target:

tgtadm --lld iscsi --mode target --op new --tid 2--targetname iqn.2012-12.com.example:server.target

查詢Target:

tgtadm --lld iscsi--mode target --op show

查詢?cè)敿?xì)信息:

tgtadm --lld iscsi--mode target --op show --tid 2 

創(chuàng)建用作LUN的文件:

ddif=/dev/zero of=/home/lun.bin count=0 obs=1 seek=1G 

添加LUN:(需要關(guān)閉SELinux,否則報(bào)錯(cuò)invalid)

tgtadm --lld iscsi--mode logicalunit --op new --tid 2 --lun 1 --backing-store /home/lun.bin

修改配置文件需要重啟機(jī)器:

修改/etc/selinux/config 文件

將SELINUX=enforcing改為SELINUX=disabled

重啟機(jī)器即可

設(shè)置訪問(wèn)權(quán)限all:(服務(wù)端權(quán)限要設(shè)到具體IP,否則客戶端discover失?。?/strong>

 tgtadm --lldiscsi --mode target --op bind --tid 2 -I all

tgtadm --lld iscsi--mode target --op bind --tid 2 -I 192.168.56.103

iscsi initiator 連接(需要關(guān)閉服務(wù)端防火墻)

systemctl stop firewalld.service

systemctl disable firewalld.service

iscsiadm -m discovery -t sendtargets -p 192.168.56.102

登錄:

iscsiadm -m node --login

#登錄某一個(gè)

#iscsiadm --mode node --targetname iqn.2012-10.net.cpd:san.target01 --portal 172.16.201.200 --login

查看核對(duì)登錄信息

iscsiadm -m session -o show

登陸后,fdisk -l 能看到iscsi掛載的服務(wù)端設(shè)備,然后可以當(dāng)做正常磁盤(pán)設(shè)備一樣使用。

配置tgt編譯環(huán)境:

去掉doc相關(guān)編譯,網(wǎng)絡(luò)連接問(wèn)題會(huì)卡住,

find -name Makefile | xargs grep O2 -R--colour

make DEBUG=yes

make install

然后就可以gdb調(diào)試了~

tgt流程分析:

http://www.sysnote.org/2014/08/23/tgt-arch/

/usr/sbin/tgtd -f

tgt鎖:

/var/run/tgtd/socket.0.lock

清理鎖:

rm -f /var/run/tgtd/*

殺掉tgtd進(jìn)程:

kill -9 pid

帶debug信息調(diào)試:

gdb -args /usr/sbin/tgtd -f -d 1

流程詳解

創(chuàng)建target

執(zhí)行:

tgtadm --lld iscsi --mode target --op new --tid 2--targetname iqn.2012-12.com.example:server.target

觸發(fā):

mgmt_event_handler

main ->ipc_init -> tgt_event_add (mgmt_event_handler )

通過(guò)socket來(lái)觸發(fā)事件:/var/run/tgtd/socket.0

tgtadm 的ipc_mgmt_connect觸發(fā)了tgtd的事件mgmt_event_handler

main -> ipc_mgmt_req -> ipc_mgmt_connect

             ipc_mgmt_req -> ipc_mgmt_rsp -> ipc_mgmt_connect

用來(lái)連接進(jìn)程。

多次觸發(fā):

mtask_recv_send_handler 來(lái)進(jìn)行進(jìn)程間通信。

mtask_recv_send_handler ->mtask_received->mtask_execute ->target_mgmt ->tgt_target_create->tgt_device_create

backing 為 0,不會(huì)啟動(dòng)bs工作線程

用來(lái)進(jìn)行具體操作。

創(chuàng)建后端存儲(chǔ)

執(zhí)行:

tgtadm --lld iscsi --mode logicalunit --op new --tid 2--lun 1 --backing-store /home/lun.bin

觸發(fā):

mgmt_event_handler(添加了管理事件處理)

mtask_recv_send_handler ->mtask_received->mtask_execute -> device_mgmt -> tgt_device_create ->bs_rdwr_init ->bs_thread_open->bs_thread_worker_fn

在執(zhí)行new 后端時(shí),會(huì)調(diào)用 bs_rdwr_init從而開(kāi)啟bs_thread_worker_fn.

創(chuàng)建設(shè)備時(shí),創(chuàng)建了16個(gè)bs工作線程。

 tgt服務(wù)端流程是怎樣的

3260是監(jiān)聽(tīng)端口

getaddrinfo 來(lái)獲取socketaddr結(jié)構(gòu)鏈表

https://baike.baidu.com/item/getaddrinfo/9021771

tgt服務(wù)端流程是怎樣的

塊設(shè)備相關(guān)初始化

main ->bs_init ->bs_init_signalfd (bs_sig_request_done)

 tgt服務(wù)端流程是怎樣的

信號(hào)量對(duì)應(yīng)的處理函數(shù)是bs_sig_request_done。

 tgt服務(wù)端流程是怎樣的

初始化后scsi_cmd_perform中才能根據(jù)操作碼op來(lái)找到對(duì)應(yīng)的操作cmd_perform。

tgt服務(wù)端流程是怎樣的

bs_thread_worker_fn 中的 info 和 bs_thread_cmd_submit 中的 info 是指向同一塊內(nèi)存x單元(gdb證實(shí))

bs_thread_worker_fn 中從info->pending_list上取下cmd

bs_rdwr_request從設(shè)備句柄fd里讀出信息到scsi的buffer中,這個(gè)函數(shù)應(yīng)該是底層塊設(shè)備的具體操作了。

 tgt服務(wù)端流程是怎樣的

iscsi_tx_handler ->iscsi_task_tx_start-> iscsi_data_rsp_build 將讀取的數(shù)據(jù)存在conn->rsp.data中

tgt服務(wù)端流程是怎樣的

以上基本上就是一個(gè)完整的服務(wù)端讀操作,響應(yīng)給客戶端的流程細(xì)節(jié)。

服務(wù)端上數(shù)據(jù)的讀或?qū)懯怯煽蛻舳丝刂频膔eq->cdb傳值給cmd->scb

bs_rdwr_request 中根據(jù)cmd->scb[0]來(lái)對(duì)塊設(shè)備進(jìn)行操作。

關(guān)于tgt服務(wù)端流程是怎樣的問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI