1、前言:

1.1、你是否有這樣的需求:

現(xiàn)在的電腦游戲和應(yīng)用程序越來越大,比如黑猴剛剛開放預(yù)載,需要100g+空間,即開心游戲內(nèi)容應(yīng)該很足,又因為電腦空間不足而難受,舍不得刪除現(xiàn)有的東西,但是又沒有多余的盤位,smb等協(xié)議雖然能掛載網(wǎng)絡(luò)硬盤,但很多程序或者游戲安裝到這種網(wǎng)絡(luò)硬盤啟動會報錯,那有什么辦法可以解決這個問題嗎?

答案就是通過iSCSI協(xié)議掛載nas的存儲空間,電腦可以將這種協(xié)議掛載的硬盤完全識別成本地硬盤,除了盤本身不在電腦里,使用上和內(nèi)置物理硬盤完全一致,比如下圖,F(xiàn),G就是掛載的iSCSI盤,和其他物理硬盤顯示一樣,而SMB掛載則顯示在網(wǎng)絡(luò)位置中。甚至可以通過iSCSI掛載來實現(xiàn)無盤系統(tǒng)(比如網(wǎng)吧就是類似這種方法實現(xiàn)的)。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

???

1.2、iSCSI和SMB優(yōu)劣

當(dāng)然在不同的應(yīng)用場景下iscsi和smb都有各自的優(yōu)劣,所以還是需要針對自己實際的使用場景出發(fā),來進(jìn)行選擇。

SMB:可以多設(shè)備掛載分享,同步操作,但安裝應(yīng)用程序打開可能會報錯,在進(jìn)行多設(shè)備文件讀寫操作時選擇這種更好。

iSCSI:可以安裝應(yīng)用程序甚至是系統(tǒng),有更好的讀寫性能,但是多個windows同時掛載可能會導(dǎo)致數(shù)據(jù)錯亂,也無法實時看到文件變化,最好是一個存儲掛載給一個設(shè)備進(jìn)行使用,所以作為程序或游戲庫要更好。

2、本教程目的&申明:

2.1、目的

現(xiàn)在新勢力的成品NAS系統(tǒng)大多原生只支持將存儲通過SMB,webDAV等協(xié)議掛載到其他的設(shè)備,iSCSI協(xié)議目前只有傳統(tǒng)品牌NAS才原生支持,對有這個需要的小伙伴來說多少有點不方便,老K本教程就是通過docker部署tgt來實現(xiàn)啟動iSCSI的服務(wù)端,讓原生不支持iSCSI協(xié)議掛載的NAS可以將存儲通過這個協(xié)議掛載到其他設(shè)備。

2.2、申明

本教程適配綠聯(lián)私有云新老系統(tǒng),極空間等支持docker的機(jī)器,操作有一定風(fēng)險,需要理解透徹后再進(jìn)行操作,配合視頻教程觀看效果更佳。

另外此項目老K基于fujita/tgt和wtnb75/docker-stgt的基礎(chǔ)進(jìn)行整和修改,如需轉(zhuǎn)載請將以上兩個項目一起帶上。

tgt項目地址:https://github.com/fujita/tgt

stgt項目地址:https://github.com/wtnb75/docker-stgt

老K修改后的項目地址:https://github.com/bilibili-koryking/iscsi-docker

3、部署前準(zhǔn)備:

3.1、進(jìn)入SSH root用戶下

依然是按照我之前的教程,進(jìn)入ssh 的root用戶下。

iSCSI可以掛載我們的物理硬盤分區(qū),也可以掛載虛擬硬盤文件,掛載物理硬盤讀寫效率更好,但需要是未使用狀態(tài)的盤(類似于虛擬機(jī)硬盤直通),虛擬磁盤文件方式掛載則更加方便,直接在NAS中創(chuàng)建或使用已有的虛擬磁盤文件就行了。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

3.2、物理掛載準(zhǔn)備

3.2.1、檢查磁盤狀態(tài)

如上所說必須要是當(dāng)前未使用狀態(tài)的盤,因為初次掛載到pc會對其進(jìn)行格式化,已使用的盤直接進(jìn)行物理掛載會在重啟NAS后app端顯示存儲池?fù)p毀。

PS:如果后面跟著操作的時候不小心掛載錯了,不要重啟,不要重啟,不要重啟,馬上備份數(shù)據(jù),還有得救。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

所有盤都已使用,可以備份數(shù)據(jù)后刪除存儲池,或者重置存儲,回到未使用狀態(tài),要不然就直接查看后面3.3虛擬磁盤文件掛載的章節(jié)。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

3.2.2、找到未使用狀態(tài)盤的設(shè)備名稱

ssh中輸入lsblk查看,下圖sdb分了兩個區(qū),我們先找到他的大存儲分區(qū)(看SIZE列的大?。?,比如這里就是sdb2,這個大分區(qū)沒有創(chuàng)建子分區(qū)(看樹結(jié)構(gòu)有沒有下層分區(qū))且后面沒有創(chuàng)建掛載點(看MOUNTPOINTS列有沒有掛載路徑),則sdb就是未被使用的硬盤設(shè)備,其他sda,nvme0n1的大分區(qū)都創(chuàng)建了一個或多個掛載點,這種就是已經(jīng)創(chuàng)建了存儲池的盤,至于nvme1n1(6800以上使用m2做系統(tǒng)盤的機(jī)型,名稱可能會根據(jù)你插入m2的數(shù)量變化)或者mmcblk0(老綠聯(lián)云,極空間,4800等使用emmc的機(jī)型)這種創(chuàng)建了p1,p2,p3,p4...的,這個是系統(tǒng)盤,千萬,千萬,千萬不要動。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

3.2.3、磁盤分區(qū)

我這里未使用的盤是sdb,則對應(yīng)的設(shè)備路徑就是/dev/sdb,執(zhí)行fdisk /dev/sdb,各位小伙伴則用自己找到的盤名替換這里的sdb。

PS:如果準(zhǔn)備整盤掛載,那就無需進(jìn)行磁盤分區(qū),直接記住/dev/sd(a,b,c...替換成你自己未使用盤的設(shè)備名)就行了。

fdisk /dev/sdb

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

因為sdb2已經(jīng)占用了所有的空間,我們需要先將sdb2分區(qū)的空間釋放出來,執(zhí)行完fdisk /dev/sdb后,我們會進(jìn)入fdisk工具中,先輸入d(表示我們要刪除分區(qū)),在輸入2(表示刪除第2個分區(qū),也就是sdb2),再輸入w(保存操作并推出fdisk工具,如果上面步驟有輸入錯了的,這里輸入q,表示直接退出,不保存操作)。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

執(zhí)行l(wèi)sblk看下,sdb下,只剩下一個分區(qū)了,這個分區(qū)是磁盤系統(tǒng)分區(qū),可以按照上面的操作給刪掉也可以不管他,反正15g也無所謂。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

繼續(xù)執(zhí)行fdisk /dev/sdb,進(jìn)入fdisk工具,先輸入n(表示創(chuàng)建分區(qū)),再輸入2(表示創(chuàng)建一個新的第2分區(qū)也就是sdb2,如果之前刪掉了sdb1,則這里輸入1),下面輸入的32000000(表示這個分區(qū)的起始塊序號,可以不輸入直接回車或者使把提示的默認(rèn)塊序號復(fù)制粘貼進(jìn)去),21251757055(表示結(jié)束的塊序號,一個塊512個字節(jié)大小,根據(jù)自己想要分區(qū)的空間大小,自己算下應(yīng)該是多少),如果有紅字提示什么簽名,直接輸入y確認(rèn)。繼續(xù)n創(chuàng)建分區(qū),直到分完所有塊,輸入w保存并退出fdisk工具。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

再次執(zhí)行l(wèi)sblk,可以看到已經(jīng)多了兩個分區(qū)了,將準(zhǔn)備掛載的分區(qū)名稱都記下(比如這里就是/dev/sdb2,/dev/sdb3),到這一步物理磁盤掛載準(zhǔn)備就做完了,如果無需虛擬磁盤掛載則直接跳轉(zhuǎn)到第4章節(jié)查看部署步驟,如果也需要虛擬磁盤掛載那就繼續(xù)按順序查看。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

3.3、虛擬磁盤掛載準(zhǔn)備

3.3.1、確定虛擬磁盤文件存放目錄

虛擬磁盤掛載則和物理磁盤掛載相反,需要盤在系統(tǒng)中已經(jīng)使用,我們先在app中對應(yīng)盤中創(chuàng)建一個目錄,用以放虛擬磁盤文件,綠聯(lián)云新系統(tǒng)直接在目錄上右鍵屬性,點擊位置后的復(fù)制即可獲取到絕對路徑。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

極空間和綠聯(lián)云老系統(tǒng)則需要創(chuàng)建后到ssh中執(zhí)行以下命令查找絕對路徑。

> find /mnt -type d -iname "virtual_disk" #綠聯(lián)云老系統(tǒng)執(zhí)行這個

> find /tmp -type d -iname "virtual_disk" #極空間執(zhí)行這個 ?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

再執(zhí)行cd 找到的絕對路徑,進(jìn)入對應(yīng)的目錄下,比如綠聯(lián)云老系統(tǒng)就是如下命令。

cd /mnt/dm-0/.ugreen_nas/82095/docker/iscsi-docker/virtual_disk

3.3.2、創(chuàng)建虛擬磁盤文件

到目錄下后,直接執(zhí)行以下命令創(chuàng)建虛擬磁盤文件(綠聯(lián)云老系統(tǒng)無法直接創(chuàng)建,可以去其他虛擬機(jī)軟件里創(chuàng)建后上傳到這個目錄里),文件可以創(chuàng)建多個,也可以在多個目錄創(chuàng)建。

qemu-img create -f raw virtual_disk.img 100G

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

執(zhí)行以下命令加個權(quán)限,防止后面docker使用不了。

chmod 777 virtual_disk.img

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

4、部署:

4.1、docker compose方式部署

綠聯(lián)云新系統(tǒng)現(xiàn)在內(nèi)置了docker compose(部署了portainer,dockge,1panel的小伙伴也能參考部署),直接打開docker>項目,點擊創(chuàng)建。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

填入一個不沖突的項目名稱,也是docker文件夾下的目錄名稱,將以下compose命令根據(jù)要求修改后填入進(jìn)去,仔細(xì)檢查掛載的目錄和盤,確認(rèn)無誤后再點擊立即部署。

services: iscsi-docker: container_name: iscsi-docker restart: unless-stopped network_mode: host privileged: true volumes: - /run/lvm:/run/lvm - /lib/modules:/lib/modules - /sys/kernel/config:/sys/kernel/config - /dev:/dev #無物理磁盤掛載則刪掉這行 - /volume1/iscsi/virtual_disk:/virtual_disk #無虛擬磁盤掛載則刪掉這行,有的話則冒號左邊替換成自己的絕對路徑 #- /volume2/iscsi/virtual_disk:/virtual_disk2 #虛擬磁盤文件在多個目錄就掛載多個目錄 environment: - targetname=koryking #target名稱,自定義一個 - lundev1=/dev/sda3 #改成自己找到的物理磁盤分區(qū),有多個分區(qū)繼續(xù)添加lundev(x) #- lundev2=/dev/sda4 - lundev3=/virtual_disk/virtual_disk.img #有多個虛擬磁盤,繼續(xù)添加lundev(x),改成映射到容器內(nèi)的虛擬磁盤路徑 #- lundev4=/virtual_disk2/virtua2_disk.img - ip_address=192.168.66.0/24 #改成自己的網(wǎng)段 image: koryking/iscsi-docker #image: docker.1panel.dev/koryking/iscsi-docker #網(wǎng)絡(luò)不好就刪掉這行開頭的#把上一行開頭加個#,失效了就自己再換個源地址 ?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

部署日志中出現(xiàn)如下內(nèi)容后就表示已經(jīng)部署完成了,點擊完成關(guān)閉彈框。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

4.2、docker run方式部署

直接在ssh的root用戶下執(zhí)行以下命令,需要改動的地方,參考上面綠聯(lián)云新系統(tǒng)compose命令的改動點。

docker run -d --net host --name iscsi-docker --restart unless-stopped --privileged -v /run/lvm:/run/lvm -v /lib/modules:/lib/modules -v /sys/kernel/config:/sys/kernel/config -v /dev:/dev -v /tmp/zfsv3/sata13/1888888888/data/virtual_disk:/virtual_disk -e targetname=koryking11 -e lundev2=/virtual_disk/virtual_disk.img -e lundev2=/dev/sda2 -e ip_address=192.168.66.0/24 docker.1panel.dev/koryking/iscsi-docker

出現(xiàn)類似下圖樣式就表示部署成功了。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

5、掛載到電腦:

電腦上直接win+r打開運行,輸入iscsicpl,點擊確定,第一次打開會有個彈框直接確定。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

目標(biāo)中填入nasip,點擊快速連接,彈框中確認(rèn)下是否和自己的targetname一致,狀態(tài)是不是已連接,點擊完成關(guān)閉彈框。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

再次win+r,輸入compmgmt.msc確認(rèn),進(jìn)入計算機(jī)管理頁面,點到磁盤管理,初次掛載會彈框發(fā)現(xiàn)了新的磁盤,點擊確定(物理磁盤掛載的情況,點擊確定前,請務(wù)必再次對比下自己的容器配置和lsblk中的信息,檢查下是不是掛載對了)。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

找到未分配空間的盤,右鍵,新建簡單卷。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

根據(jù)提示一路下一步就可以創(chuàng)建成本地磁盤了。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

先別急著結(jié)束,一定要記得再回到iSCSI發(fā)起程序中,選擇卷和設(shè)備頁簽,點擊自動配置,再點擊確定,將盤符給固定一下,不然后續(xù)如果重啟機(jī)器或者添加空間,可能會出現(xiàn)沖突導(dǎo)致掛載失敗的問題。

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

6、擴(kuò)展操作:

如果你懂tgt的使用,或者有更多的需求,仍然可以進(jìn)入到iscsi-docker容器終端中,使用tgt的命令進(jìn)行更多配置。

比如如下命令就是查看當(dāng)前target配置情況(掛載遇到問題可以到這里查看下lun信息對不對,再對比下lsblk的信息并修改容器創(chuàng)建的命令)。

tgtadm --mode target --op show

?

iSCSI or SMB?一起部署一個iSCSI服務(wù)端,將NAS空間掛載成真正的電腦硬盤

?

其他一些命令(更多用法可以到tgt的倉庫中查看tgt文檔),這里就不再贅述了:

#創(chuàng)建target tgtadm --mode target --op new --tid 1 --targetname koryking #創(chuàng)建lun tgtadm --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb #放開防火墻 tgtadm --mode logicalunit --op new --tid 1 --lun $i --backing-store 192.168.66.0/24

7、最后:

iSCSI or SMB的答案自然是全部都需要,根據(jù)不同的應(yīng)用場景選擇不同的協(xié)議,也希望各大新勢力官方能盡快更新支持iSCSI協(xié)議,畢竟docker方式掛載還是有一點麻煩且有一定局限性的。

最后,大家覺得有用的話,記得點個關(guān)注點個贊,我們下期再見。

作者聲明本文無利益相關(guān),歡迎值友理性交流,和諧討論~

,

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。