一、samba 軟件簡(jiǎn)介
SMB(Server Messages Block,信息服務(wù)塊)是基于NetBIOS(Network Basic Input/Output System)通訊協(xié)議開發(fā)的一種在局域網(wǎng)上共享文件和打印機(jī)的通信協(xié)議,主要用于 Windows 系統(tǒng)與類 Unix 系統(tǒng)之間進(jìn)行數(shù)據(jù)共享服務(wù),由服務(wù)器與客戶端程序構(gòu)成。由于NetBl0S是一種局域網(wǎng)通訊協(xié)議,所以SMB無法跨路由使用(Router/Gateway),但是可以通過設(shè)置“NetBIOS over TCP/IP”使得SMB不但能與局域網(wǎng)絡(luò)主機(jī)分享資源,還能與全世界的電腦分享資源。另外,SMB軟件的作者在申請(qǐng)商標(biāo)時(shí),因?yàn)镾MB沒有實(shí)際意義,所以更名為samba。
samba程序主要應(yīng)用于以下方面:
二、samba 服務(wù)的安裝
目前在CentOS 6系統(tǒng)中主要是samba 3.x的版本,在RHEL 7或CentOS 7系統(tǒng)中主要是samba 4.x的版本。
1、samba 程序包說明
samba 3.x的版本
samba 4.x
2、 安裝 samba 程序
CentOS6 系統(tǒng)
yum install -y samba samba-client
RHEL7或CentOS7系統(tǒng)
yum install -y samba samba-client samba-winbind samba-winbind-clients
三、 samba 服務(wù)的啟動(dòng)與端口說明
samba 服務(wù)是通過以下兩個(gè)守護(hù)進(jìn)程來控制共享的,分別是:
所以啟動(dòng) samba 服務(wù)需要啟動(dòng)這兩個(gè)守護(hù)進(jìn)程。
設(shè)置 samba 服務(wù)開機(jī)自啟,并啟動(dòng)服務(wù)。
CentOS6 系統(tǒng)
RHEL7或CentOS7系統(tǒng)
四、與 samba 服務(wù)的相關(guān)文件說明
1. /etc/samba/smb.conf
samba服務(wù)的主配置文件,主要用于samba服務(wù)器全局及共享資源的相關(guān)設(shè)置。
a、 配置文件結(jié)構(gòu)
#Global Settings全局設(shè)置
[global] 全局設(shè)置
設(shè)置項(xiàng)
#Share Definitions共享定義
[homes] 用戶家目錄共享設(shè)置
設(shè)置項(xiàng)
[myshare] 自定義共享目錄設(shè)置
設(shè)置項(xiàng)
[printers]:打印機(jī)共享設(shè)置
設(shè)置項(xiàng)
設(shè)置項(xiàng)格式為:name=value
b、[global] 全局設(shè)置項(xiàng)參數(shù)
workgroup=MYGROUP
用于設(shè)定samba服務(wù)器所要加入的工作組名或域名。
server string=Samba Server Version %v
用于設(shè)定samba服務(wù)器的注釋,可以不填。%v表示samba的版本。
netbios name=MYSERVER
用于設(shè)置samba服務(wù)器的NetBIOS名稱,每臺(tái) samba 服務(wù)器需設(shè)置設(shè)為不同的名稱。netbios name和workgroup名稱需不相同。
interfaces=lo eth0 192.168.12.2/24 192.168.13.2/24
用于設(shè)置samba服務(wù)器對(duì)那塊網(wǎng)卡進(jìn)行監(jiān)聽,可以寫網(wǎng)卡名,也可以寫該網(wǎng)卡的IP地址,多個(gè)參數(shù)用空格分開。
hosts allow=127. 192.168.12. 192.168.13.
用于設(shè)置允許連接samba服務(wù)器的客戶端,多個(gè)參數(shù)以空格隔開。表示方法見以下說明。
hosts deny=name1,name2
用于設(shè)置禁止連接samba服務(wù)器的客戶端,多個(gè)參數(shù)以空格隔開。表示方法見以下說明。
【表示方法說明】
用完整IP地址表示:如192.168.1.100
用IP網(wǎng)段表示:如127. 192.168.0.
用EXCEPT進(jìn)行排除表示:如 192.168.1.EXCEPT 192.168.1.100
用機(jī)器名表示:name1,name2
max connections=0
用于設(shè)置連接samba服務(wù)器的最大連接數(shù),如果超過這個(gè)連接數(shù),則新的連接請(qǐng)求將被拒絕。0表示不限制。
deadtime=10
用于設(shè)置samba服務(wù)器與客戶端在多長(zhǎng)時(shí)間內(nèi)沒有任何打開文件操作就斷開連接的時(shí)間。單位是分鐘,0代表不自動(dòng)切斷任何連接。
log file=/var/log/samba/log.%m
用于設(shè)置samba服務(wù)器日志文件的存儲(chǔ)位置以及日志文件名稱,%m表示客戶端的NetBIOS主機(jī)名
max log size=50
用于設(shè)置samba服務(wù)器日志文件的最大容量,單位為kB,0代表不限制。
security=user
用于設(shè)置用戶訪問samba服務(wù)器的驗(yàn)證方式,共有四種驗(yàn)證方式。
用戶訪問samba服務(wù)器不需要提供賬號(hào)和密碼,安全性能較低。
注意:新版本的samba security=share已經(jīng)不能用了,要換成
security=user
map to guest=Bad User
如果繼續(xù)使用share,就會(huì)導(dǎo)致系統(tǒng)服務(wù)起不來。
用戶訪問samba服務(wù)器需要使用賬號(hào)和密碼,而且身份驗(yàn)證由samba服務(wù)器負(fù)責(zé),賬號(hào)和密碼需在samba服務(wù)器中建立。
用戶訪問samba服務(wù)器需要使用賬號(hào)和密碼,可指定其他Windows服務(wù)器或另一臺(tái)samba服務(wù)器來作身份驗(yàn)證。如果認(rèn)證失敗,samba服務(wù)器將使用user安全模式作為替代的認(rèn)證方式。
用戶訪問samba服務(wù)器需要使用賬號(hào)和密碼,使用Windows域控制器(PDC)來完成認(rèn)證。
passdb backend=tdbsam
passdb backend 就是用戶后臺(tái)的意思。目前有三種后臺(tái):smbpasswd、tdbsam和ldapsam。sam應(yīng)該是security account manager(安全賬戶管理)的簡(jiǎn)寫。
該方式是使用smb自己的工具smbpasswd來給系統(tǒng)用戶(真實(shí)用戶或者虛擬用戶)設(shè)置一個(gè)samba密碼,客戶端就用這個(gè)密碼來訪問samba的資源。smbpasswd文件默認(rèn)在/etc/samba目錄下,不過有時(shí)候需要手工建立該文件。
該方式則是使用一個(gè)數(shù)據(jù)庫(kù)文件來建立用戶數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)文件名為passdb.tdb,默認(rèn)在/etc/samba目錄下。passdb.tdb用戶數(shù)據(jù)庫(kù)可以使用smbpasswd –a來建立samba用戶,不過要建立的samba用戶必須先是系統(tǒng)用戶。還可以使用pdbedit命令來建立samba用戶。pdbedit命令主要使用方法如下:
pdbedit –a username #新建samba用戶。
pdbedit –x username# #刪除samba用戶。
pdbedit –L #顯示samba用戶列表。
pdbedit –Lv #顯示samba用戶列表的詳細(xì)信息。
pdbedit –c “[D]” –u username #暫停該用戶的賬號(hào)。
pdbedit –c “[]” –u username #恢復(fù)該用戶的賬號(hào)。
該方式則是基于LDAP的賬戶管理方式來驗(yàn)證用戶。首先要建立LDAP服務(wù),然后設(shè)置“passdb backend=ldapsam:ldap://LDAP Server”
encrypt passwords=yes/no
用于設(shè)置是否將認(rèn)證密碼加密。因?yàn)楝F(xiàn)在windows操作系統(tǒng)都是使用加密密碼,所以一般要開啟此項(xiàng)。不過配置文件默認(rèn)已開啟。
password server=<NT-Server-Name>
用于在security=server時(shí),指定某臺(tái)服務(wù)器作為用戶認(rèn)證服務(wù)器。
smb passwd file=/etc/samba/smbpasswd
用于定義samba用戶的密碼文件存放位置及名稱,習(xí)慣設(shè)置為/etc/samba/smbpasswd 。
username map=/etc/samba/smbusers
用于定義用戶名映射文件存放位置及名稱,習(xí)慣設(shè)置為/etc/samba/smbusers。此文件用于設(shè)置Windows系統(tǒng)用戶名與Linux系統(tǒng)用戶名的映射關(guān)系,如 root=administrator admin,這樣就可以用administrator或admin這兩個(gè)用戶來代替root用戶登陸samba服務(wù)器,更貼近windows用戶的習(xí)慣。
guest account=nobody
用于設(shè)置samba服務(wù)器用guest用戶登錄時(shí),所對(duì)應(yīng)的Linux系統(tǒng)用戶名,默認(rèn)為nobody用戶。
smb ports=445 139
用于指定服務(wù)器應(yīng)該偵聽哪些端口以獲取SMB流量,默認(rèn)為139 445端口。
socket options=TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
用于設(shè)置服務(wù)器和客戶端之間會(huì)話的Socket選項(xiàng),可以優(yōu)化傳輸速度。
domain master=yes/no
用于設(shè)置samba服務(wù)器是否要成為samba網(wǎng)絡(luò)主瀏覽器,samba網(wǎng)絡(luò)主瀏覽器可以管理跨子網(wǎng)域的瀏覽服務(wù)。
local master=yes/no
用于指定samba服務(wù)器是否試圖成為本地samba網(wǎng)絡(luò)的主瀏覽器。如果設(shè)為no,則永遠(yuǎn)不會(huì)成為主瀏覽器。但是即使設(shè)置為yes,也不等于該samba服務(wù)器就能成為主瀏覽器,還需要參加選舉。
preferred master=yes/no
用于設(shè)置samba服務(wù)器開機(jī)就強(qiáng)迫進(jìn)行主瀏覽器選舉,可以提高samba服務(wù)器成為本地samba網(wǎng)絡(luò)主瀏覽器的機(jī)會(huì)。如果該參數(shù)指定為yes時(shí),最好把domain master也指定為yes。使用該參數(shù)時(shí)要注意:如果在本samba服務(wù)器所在的子網(wǎng)有其他的機(jī)器(不論是windows NT,還是其他samba服務(wù)器)也指定為首要主瀏覽器時(shí),那么這些機(jī)器將會(huì)因?yàn)闋?zhēng)奪主瀏覽器而在網(wǎng)絡(luò)上大發(fā)廣播,影響網(wǎng)絡(luò)性能。
如果同一個(gè)區(qū)域內(nèi)有多臺(tái)samba服務(wù)器,將上面三個(gè)參數(shù)設(shè)定在一臺(tái)服務(wù)器即可。
os level=200
用于設(shè)置samba服務(wù)器的os level值。該參數(shù)決定samba服務(wù)器是否有機(jī)會(huì)成為本地samba網(wǎng)絡(luò)的主瀏覽器。os level從0到255,WINNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果設(shè)置為0,則意味著samba服務(wù)器將失去瀏覽選擇。如果想讓samba服務(wù)器成為PDC,需將它os level值設(shè)置大些。
domain logons=yes/no
用于設(shè)置samba服務(wù)器是否要作為本地域控制器。主域控制器和備份域控制器都需要開啟此項(xiàng)。
wins support=yes/no
用于設(shè)置samba服務(wù)器是否提供wins服務(wù)。
wins server=Windows服務(wù)器IP地址
用于設(shè)置samba 服務(wù)器是否使用別的Windows服務(wù)器提供wins服務(wù)。
wins proxy=yes/no
用于設(shè)置samba 服務(wù)器是否開啟wins代理服務(wù)。
dns proxy=yes/no
用于設(shè)置samba 服務(wù)器是否開啟dns代理服務(wù)。
load printers=yes/no
用于設(shè)置是否在啟動(dòng)samba時(shí)就共享打印機(jī)。
printcap name=cups
用于設(shè)置共享打印機(jī)的配置文件。
printing=cups
用于設(shè)置samba共享打印機(jī)的類型。現(xiàn)在支持的打印系統(tǒng)有:bsd, sysv, plp, lprng, aix, hpux, qnx
c、[share name] 共享參數(shù)
comment=任意字符串
用于設(shè)置對(duì)該共享資源的描述,可以是任意字符串。
path=共享目錄路徑
用于指定共享目錄的路徑。可以用%u、%m這樣的宏來代替路徑里的unix用戶和客戶機(jī)的NetBIOS name,用宏表示主要用于[homes]共享域。例如:如果我們不打算用home段作為客戶的共享,而是在/home/share/下為每個(gè)Linux用戶以他的用戶名建個(gè)目錄,作為他的共享目錄,這樣path就可以寫成:path=/home/share/%u; 。用戶在連接到這共享時(shí)具體的路徑會(huì)被他的用戶名代替,要注意這個(gè)用戶名路徑一定要存在,否則,客戶機(jī)在訪問時(shí)會(huì)找不到網(wǎng)絡(luò)路徑。同樣,如果我們不是以用戶來劃分目錄,而是以客戶機(jī)來劃分目錄,為網(wǎng)絡(luò)上每臺(tái)可以訪問samba的機(jī)器都各自建個(gè)以它的netbios name的路徑,作為不同機(jī)器的共享資源,就可以這樣寫:path=/home/share/%m 。
browseable=yes/no
用于指定該共享資源是否瀏覽可見。
read only=yes/no
用于指定該共享資源是否只讀
writable=yes/no
用于指定該共享資源是否可寫。
directory mask=0755
用于設(shè)置用戶新建目錄的權(quán)限。默認(rèn)值為directory mask=0755
create mask=0744
用于設(shè)置用戶新建文件的權(quán)限。默認(rèn)值為create mask=0744
available=yes/no
用于指定該共享資源是否可用。
admin users=該共享的管理者
用于指定該共享的管理員(對(duì)該共享具有完全控制權(quán)限)。在samba 3.0中,如果用戶驗(yàn)證方式設(shè)置成“security=share”時(shí),此項(xiàng)無效。
例如:admin users=name1,name2(多個(gè)用戶中間用逗號(hào)隔開)。
valid users=允許訪問該共享的用戶
用于指定允許訪問該共享資源的用戶。例如:valid users=name1,@name1,@name2(多個(gè)用戶或者組中間用逗號(hào)隔開,如果要加入一個(gè)組就用“@+組名”表示。)
invalid users=禁止訪問該共享的用戶
用于指定禁止訪問該共享資源的用戶。例如:invalid users=root,@name1(多個(gè)用戶或組中間用逗號(hào)隔開。)
write list=允許寫入該共享的用戶
用于指定可以在該共享下寫入文件的用戶。例如:write list=name1,@name2
guest ok=yes/no
用于指定該共享是否允許guest賬戶訪問。
public=yes/no
同guest參數(shù)。
d、在配置文件中常用的變量
2、 /etc/samba/Imhosts
NetBIOS name 與IP地址的對(duì)應(yīng)關(guān)系文件,一般samba會(huì)自動(dòng)搜索(只對(duì)本機(jī)生效)。目前Samba預(yù)設(shè)會(huì)去使用本機(jī)名稱(hostname)作為NetBl0S name,因此不需要設(shè)定也可以。
3、 /etc/sysconfig/samba
提供啟動(dòng)smbd和nmbd服務(wù)時(shí),要加入的相關(guān)服務(wù)參數(shù)。
4、/etc/samba/smbusers
用來設(shè)置Windows系統(tǒng)與Linux系統(tǒng)管理員與訪客用戶名之間的對(duì)應(yīng)關(guān)系,需要配置文件中“username map”選項(xiàng)支持。如在Windows系統(tǒng)中管理員為administrator,Linux系統(tǒng)中為root。可在此文件中進(jìn)行如下設(shè)置。
root=administrator admin
nobody=guest pcguest smbguest
5、/var/lib/samba/private/passdb.tdb,secrets.tdb
管理samba的用戶賬號(hào)和密碼的數(shù)據(jù)庫(kù)文件。
6、/usr/share/doc/samba-<版本>
samba相關(guān)的所有技術(shù)文檔。
五、samba管理常用命令
服務(wù)器端命令,用于檢驗(yàn)samba服務(wù)配置文件smb.conf的語(yǔ)法是否正確。當(dāng)編輯過smb.conf文件需要使用這個(gè)命令來進(jìn)行檢查。
服務(wù)器端命令,顯示samba服務(wù)器的聯(lián)機(jī)狀態(tài),包括samba服務(wù)器聯(lián)機(jī)的PlD,分享的資源,正在使用的用戶等信息。
服務(wù)器端命令,用于管理samba服務(wù)的用戶賬號(hào)和密碼,早期使用smbpasswd命令, 后因使用TDB數(shù)據(jù)庫(kù)文件來保存samba用戶信息,改為pdbedit 命令來管理用戶數(shù)據(jù)。
服務(wù)器端命令,用于查看samba用戶信息數(shù)據(jù)庫(kù)文件的內(nèi)容。需安裝tdb-tools軟件包。
服務(wù)器端命令,可直接進(jìn)入數(shù)據(jù)庫(kù)文件手動(dòng)修改samba用戶的賬號(hào)與密碼。需安裝tdb-tools軟件包。
客戶端命令,在Linux系統(tǒng)上,可使用mount(mount.cifs)命令將遠(yuǎn)程主機(jī)分享的資源掛載到Linux主機(jī)上。
客戶端命令,主要用于查出NetB10S name。
客戶端命令,以工作組與計(jì)算機(jī)名方式,樹形顯示samba服務(wù)的共享資源列表。
客戶端命令,來查看其他計(jì)算機(jī)所分享出來的共享資源信息。
以上是我在學(xué)習(xí)Linux系統(tǒng)中整理的一些學(xué)習(xí)要點(diǎn),肯定會(huì)有不對(duì)的地方,希望各位大俠給與指正,我們共同學(xué)習(xí)!謝謝!
下篇:Linux服務(wù)器配置-samba服務(wù)配置(二)
將介紹samba服務(wù)的防火墻配置,并通過實(shí)例說明samba共享資源無需密碼訪問的配置。
今天抽時(shí)間折騰了一套無盤的 win10,簡(jiǎn)單來講,使用 ipxe 網(wǎng)絡(luò)啟動(dòng),將 win10 安裝到網(wǎng)絡(luò)的 iscsi 硬盤(存在服務(wù)器上的單獨(dú)文件)中,然后正常啟動(dòng)。這中間主要使用的幾個(gè)軟件工具及作用如下:
我用的 virtualbox 進(jìn)行的測(cè)試,virtualbox 中創(chuàng)建了 openwrt,ubuntu, wins 三個(gè)虛擬機(jī)。并且在同一個(gè)內(nèi)網(wǎng)中。openwrt 用來做網(wǎng)關(guān)和提供 dhcp 服務(wù),因此需要雙網(wǎng)卡。ubutu 我為了主機(jī)訪問文件方便,也弄了個(gè)雙網(wǎng)卡。具體的使用和配置可以從網(wǎng)上搜索。wins 配置從網(wǎng)絡(luò)啟動(dòng),不添加硬盤,不從 uefi 啟動(dòng)。
因?yàn)槲业?openwrt 僅僅提供基本的網(wǎng)絡(luò)服務(wù),因此其他的服務(wù)都是在 ubuntu 這個(gè)系統(tǒng)中的,包括 tftpd 服務(wù),因此需要將 tftpd 的訪問信息攔截并轉(zhuǎn)發(fā)到 ubuntu 中。dnsmasq YYDS!!。在/etc/dnsmasq.conf 中添加下面的內(nèi)容
dhcp-option-force=211,60i #這個(gè)好像是設(shè)置超時(shí)的
dhcp-option=option:tftp-server,192.168.1.127 #這個(gè)設(shè)置真實(shí)的tftp服務(wù)器的,這個(gè)ip就是ubuntu系統(tǒng)在內(nèi)網(wǎng)中的服務(wù)器,不能跨網(wǎng)段,本文中調(diào)到的這個(gè)ip需要換成實(shí)際的
dhcp-boot=ipxe/netboot.xyz.kpxe,192.168.1.127,192.168.1.127 #這個(gè)是bios方式的ipx啟動(dòng)文件,后面的是tftp服務(wù)對(duì)應(yīng)的域名和ip
dhcp-match=set:efi-x86_64,option:client-arch,7 #這兩行是efi啟動(dòng)方式,我沒有測(cè)試過
dhcp-boot=tag:efi-x86_64,ipxe/netboot.xyz.efi,192.168.1.127
下面這些其實(shí)都可以扔到 openwrt 中,只是我沒有想著擴(kuò)充 openwrt,好像硬盤只有 1G 還是多少的。ubuntu 系統(tǒng)安裝 docker, tgt。
apt-get -y remove docker docker-engine docker.io containerd runc
apt-get -y update
apt-get -y install ca-certificates curl gnupg lsb-release tgt
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update -y
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
#普通用戶想要執(zhí)行docker命令可以在普通用戶權(quán)限下運(yùn)行這個(gè)添加權(quán)限
#sudo usermod -aG docker $USER
ipxe 等服務(wù)的 docker 啟動(dòng)配置
version: '3'
services:
tftp:
image: pghalliday/tftp
restart: always
volumes:
- ./buildout/buildout:/var/tftpboot:rw
ports:
- "69:69/udp"
- "69:69/tcp"
logging:
driver: "json-file"
samba:
image: andyzhangx/samba:win-fix
command: "-r -w WORKGROUP -s \"share;/share;yes;no;yes;all;all\" "
restart: always
environment:
- TZ=CST6CDT
- NMBD=true
- FILEMASK=0777
- DIRECTORYMASK=0777
- FORCEGROUP=root
- FORCEUSER=root
- USERID=0
- GROUPID=0
volumes:
- /data:/share #/data中的目錄將被顯示在共享文件的share中
ports:
- "139:139"
- "445:445"
logging:
driver: "json-file"
web:
image: nginx:alpine
restart: always
ports:
- "80:80"
volumes:
- ./buildout:/var/www/html:rw
- /data:/var/www/html/buildout/iso:rw
- ./nginx-site.conf:/etc/nginx/conf.d/default.conf:rw
logging:
driver: "json-file"
配置中的 nginx 的配置文件:
server {
listen 80;
server_name localhost;
root /var/www/html/buildout;
index index.php index.html index.htm;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 512m;
client_body_buffer_size 512m;
autoindex on;
location / {
try_files $uri $uri/ /index.html;
}
}
roles/netbootxyz/files/ipxe/local/general.h 中添加如下配置,開啟 sanboot 相關(guān)功能
#define PXE_STACK /* PXE stack in iPXE - you want this! */
#define PXE_MENU /* PXE menu booting */
#define DOWNLOAD_PROTO_NFS /* Network File System Protocol */
#define SANBOOT_PROTO_ISCSI /* iSCSI protocol */
#define SANBOOT_PROTO_AOE /* AoE protocol */
#define SANBOOT_PROTO_IB_SRP /* Infiniband SCSI RDMA protocol */
#define SANBOOT_PROTO_FCP /* Fibre Channel protocol */
#define SANBOOT_PROTO_HTTP /* HTTP SAN protocol */
#define PXE_CMD /* PXE commands */
user_overrides.yml 中修改相關(guān)配置:
boot_domain: 192.168.1.127
bootloader_http_enabled: true
我寫了個(gè)小腳本來進(jìn)行 netbootxyz 的編譯:
#!/bin/bash
cd netboot.xyz
docker build -t localbuild -f Dockerfile .
docker run --rm -it -v $(pwd)/../buildout:/buildout localbuild
netbootxyz 構(gòu)建出的 menu.ipxe 中添加下面的內(nèi)容(我的在 buildout 目錄中):
#item --gap Default: 這行下面添加
item win10_boot ${space} win10_64_boot
item win10_install ${space} win10_64_install
#下面的添加到最后
:win10_boot
echo "boot win10 from iscsi"
set keep-san 1
#ip地址需要注意,對(duì)于默認(rèn)的tgt來說,iqn之前的冒號(hào)前有個(gè)1
sanboot iscsi:192.168.1.127:::1:iqn.rix.test.win:win10 || goto mainmenu
:win10_install
echo "install win10 to iscsi"
imgfree
set keep-san 1
sanhook iscsi:192.168.1.127:::1:iqn.rix.test.win:win10
kernel http://${boot_domain}/wimboot
initrd http://${boot_domain}/iso/win10/boot/bcd BCD
initrd http://${boot_domain}/iso/win10/boot/boot.sdi boot.sdi
initrd http://${boot_domain}/iso/win10/sources/boot.wim boot.wim
boot
上面的 iso/win10 目錄下存放的是從 win10 鏡像中解壓縮出來的文件
我的 tgt 沒有放到 docker 中,所以單獨(dú)配置下吧。在/etc/tgt/conf.d 目錄下隨便添加一個(gè).conf 后綴的文件,內(nèi)容如下:
<target iqn.rix.test.win:win10>
backing-store /data/disks/win.img
</target>
上面的那個(gè) iqn 是很重要的,配置啟動(dòng)的時(shí)候需要用到。然后使用下列命令創(chuàng)建一個(gè)磁盤鏡像:
fallocate -l 40G /data/disks/win10.img
我將所有磁盤鏡像,windows 的安裝文件啥的都扔在/data 目錄下。重啟并檢查 tgt:
sudo systemctl restart tgt
sudo tgtadm --mode target --op show #這個(gè)命令應(yīng)該可以看到我們的iqn以及對(duì)應(yīng)的磁盤文件
win10 的虛擬機(jī)啟動(dòng),如果準(zhǔn)備工作正確的話,會(huì)看到 netboot.xyz 的界面,并且看到我們添加的自定義的菜單,然后選賊 win10_install。正確的話,會(huì)啟動(dòng) win10 的安裝流程,這個(gè)在虛擬機(jī)中運(yùn)行的時(shí)候,等待的時(shí)間比較長(zhǎng),也可能是以為我給虛擬機(jī)分配的內(nèi)存比較少。總之,如果看到 win10 的選擇語(yǔ)言的選項(xiàng),就說明正常了。
如果這個(gè)時(shí)候按照正常的安裝邏輯的話,在安裝程序啟動(dòng)后,會(huì)找不到磁盤。所以,我們?cè)谡Z(yǔ)言之后,要選擇“修復(fù)計(jì)算機(jī)”->“疑難解答”->“命令行提示符”然后在彈出的命令行中輸入以下代碼:
net use \\192.168.1.127\share
\\192.168.1.127\share\win10\sources\setup.exe
第一行表示使用共享目錄。第二行執(zhí)行共享目錄下 win10 目錄中原始的安裝程序。之后和正常的 win10 安裝一樣了。最后到倒計(jì)時(shí)重啟。重啟后,選擇 win10_64_boot 這項(xiàng)進(jìn)行啟動(dòng),以后都可以使用這個(gè)來進(jìn)行啟動(dòng)。
使用流程除了從網(wǎng)絡(luò)啟動(dòng)外,其他的和有磁盤的方式?jīng)]太大區(qū)別。默認(rèn)的情況下,數(shù)據(jù)也可以保存,數(shù)據(jù)保存是自動(dòng)通過網(wǎng)絡(luò)保存到服務(wù)器上的,只是啟動(dòng)的過程比較慢,文件讀寫涉及到網(wǎng)卡速度,估計(jì)大文件會(huì)比較慢。
使用這種方式創(chuàng)建的無盤系統(tǒng)只是作為一個(gè)參考,比不得專業(yè)的無盤系統(tǒng)的效率。