中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

tgt服務端流程是怎樣的

發布時間:2021-12-28 15:53:15 來源:億速云 閱讀:187 作者:柒染 欄目:云計算

tgt服務端流程是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

整體流程

tgt服務端流程是怎樣的

Figure1 tgt流程圖

基本操作

安裝tgt包:

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

安裝完成后,啟動 TGT 服務:

# service tgtd start

如果想在系統啟動時自動啟動 TGT 服務,可以使用如下命令:

# chkconfig tgtd on

如果想確認 TGT 服務是否啟動,可以用 # servicetgtd status 查看服務狀態;當然,也可以查詢 TGT 服務占用的端口:

# netstat -anlpt | grep 3260

其中,3260 是 TGT 服務的監聽端口。結果如下:

創建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

查詢詳細信息:

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

創建用作LUN的文件:

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

添加LUN:(需要關閉SELinux,否則報錯invalid)

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

修改配置文件需要重啟機器:

修改/etc/selinux/config 文件

將SELINUX=enforcing改為SELINUX=disabled

重啟機器即可

設置訪問權限all:(服務端權限要設到具體IP,否則客戶端discover失敗)

 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 連接(需要關閉服務端防火墻)

systemctl stop firewalld.service

systemctl disable firewalld.service

iscsiadm -m discovery -t sendtargets -p 192.168.56.102

登錄:

iscsiadm -m node --login

#登錄某一個

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

查看核對登錄信息

iscsiadm -m session -o show

登陸后,fdisk -l 能看到iscsi掛載的服務端設備,然后可以當做正常磁盤設備一樣使用。

配置tgt編譯環境:

去掉doc相關編譯,網絡連接問題會卡住,

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

make DEBUG=yes

make install

然后就可以gdb調試了~

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進程:

kill -9 pid

帶debug信息調試:

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

流程詳解

創建target

執行:

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

觸發:

mgmt_event_handler

main ->ipc_init -> tgt_event_add (mgmt_event_handler )

通過socket來觸發事件:/var/run/tgtd/socket.0

tgtadm 的ipc_mgmt_connect觸發了tgtd的事件mgmt_event_handler

main -> ipc_mgmt_req -> ipc_mgmt_connect

             ipc_mgmt_req -> ipc_mgmt_rsp -> ipc_mgmt_connect

用來連接進程。

多次觸發:

mtask_recv_send_handler 來進行進程間通信。

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

backing 為 0,不會啟動bs工作線程

用來進行具體操作。

創建后端存儲

執行:

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

觸發:

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

在執行new 后端時,會調用 bs_rdwr_init從而開啟bs_thread_worker_fn.

創建設備時,創建了16個bs工作線程。

 tgt服務端流程是怎樣的

3260是監聽端口

getaddrinfo 來獲取socketaddr結構鏈表

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

tgt服務端流程是怎樣的

塊設備相關初始化

main ->bs_init ->bs_init_signalfd (bs_sig_request_done)

 tgt服務端流程是怎樣的

信號量對應的處理函數是bs_sig_request_done。

 tgt服務端流程是怎樣的

初始化后scsi_cmd_perform中才能根據操作碼op來找到對應的操作cmd_perform。

tgt服務端流程是怎樣的

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

bs_thread_worker_fn 中從info->pending_list上取下cmd

bs_rdwr_request從設備句柄fd里讀出信息到scsi的buffer中,這個函數應該是底層塊設備的具體操作了。

 tgt服務端流程是怎樣的

iscsi_tx_handler ->iscsi_task_tx_start-> iscsi_data_rsp_build 將讀取的數據存在conn->rsp.data中

tgt服務端流程是怎樣的

以上基本上就是一個完整的服務端讀操作,響應給客戶端的流程細節。

服務端上數據的讀或寫是由客戶端控制的req->cdb傳值給cmd->scb

bs_rdwr_request 中根據cmd->scb[0]來對塊設備進行操作。

關于tgt服務端流程是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

家居| 通化县| 特克斯县| 新乡县| 佛冈县| 积石山| 城步| 集安市| 安平县| 湟中县| 三穗县| 乐业县| 随州市| 陈巴尔虎旗| 泗阳县| 宁陵县| 扬中市| 安阳市| 舞钢市| 清涧县| 瓦房店市| 溆浦县| 越西县| 南乐县| 榆林市| 金寨县| 繁昌县| 宜春市| 英德市| 汉源县| 尼木县| 北辰区| 新平| 红桥区| 宁夏| 阳东县| 宝坻区| 齐齐哈尔市| 舒城县| 墨脱县| 东乌珠穆沁旗|