- 前言
- 預先規劃
- 我個人的CIFS分享結構
- iSCSI部份 因為主要是實驗用,除了target名稱要簡單好記外(如iqn.2011-05.org.zfs:xd),就是iSCSI Logic Unit的廠牌和型號要設定成容易分辨的(如vid=zfs-nas,pid=64gb-test),並沒有特別預先規劃的部份,有需要再立刻建立就足夠了。
- 建立zpool和設定zfs檔案系統
- 接硬碟的注意事項 在把sata線接到主機板時,這裡故意把raidz的四顆硬碟,接到c1t1do~c1t4d0連續四個位置,加上硬碟和排線都寫上編號,這樣在出問題時比較好判斷是對應哪一個實際硬碟。
- 建立zpool 列出硬碟,利用format指令,列出後用ctrl+c取消。
- 建立準備分享的檔案系統 有幾項參數必須在建立檔案系統時就一起設定,建立之後就無法修改。
- 檢查ACL繼承設定 把aclinherit設定成passthrough,我只記得設定成後passthrough實驗後符合需求,理由沒有紀錄到。
- 建立帳號、CIFS分享和ACL權限設定
- 建立帳號 建立CIFS密碼,使用vi編輯/etc/pam.conf
- 以下根據預先完成的規劃進行 建立群組xd
- 開始設定CIFS分享 確認CIFS是否有啟動,因為solaris核心內建CIFS,NexentaCore預設CIFS應該是啟動的。
- 設定ACL權限 預設的read_set會沒辦法展開資料夾,所以只好加上x,變成r-x---a-R-c--s,才能在windows底下展開資料夾。其他的modify_set和full_set都沒有問題。說明是說權限加有r就能展開目錄,但是我試不出來。
- 設定owner及group 原則依我先寫下來的規則去進行,這部分其實等檔案轉移完再進行,就可以了。
- owner和ACL設定,假如沒有要透過其他的電腦從CIFS轉移資料,這部分其實等檔案轉移完再進行。 以上的權限和ACL設定,實際上對已經轉移完成的80萬個檔案共2.4tb資料,大約10~15分鐘跑完。
- 從舊NAS轉移資料
- 直接在ZFS NAS用CIFS轉移資料 因為要把舊機器的smb分享掛上來,要確定smb client已經啟動。NexentaCore預設啟動。
- 安裝rsync 在NexentaCore安裝rsync,因為須要rsync的checksum比對,這是整個過程唯一需要連上外部網路的部份。
- 第一輪先做轉移資料 先跑單純的複製,所以不使用-c的chcksum比較,也不使用--del的刪除功能,把舊資料複製到新的ZFS NAS。舊NAS速度不快大約花了30小時左右完成。
- 約80萬個檔案共2.4tb資料,snapshot建立不需要1分鐘,幾乎是瞬間完成,加上透過CIFS在windows底下,可以直接在[內容] => [以前的版本] 看到過去snapshot的內容,ZFS這點真是棒的沒話說。
- 第二輪作資料比對 針對已經複製完成的資料,再做第二輪的checksum比對,所以加上-c 表示使用checksum比較。
- 第二輪複製完成後,同樣建立snapshot避免意外。 利用-r參數讓xd-raidz底下所有的檔案系統都用相同的snapshot名稱
- 建立額外備份 主要資料複製完成後,我還有一顆2tb的備份碟,只針對要轉移的資料中,非常重要的部份,再備份一份。
- 用hold把重要的snapshot設定為keep狀態 最終檢查完成後,確認所有檔案都正確,且更正權限後,除了建立snapshot,再額外用hold把snapshot設定為keep狀態,同樣是避免snapshot被意外修改。
- 刪除不必要的snapshot 刪除轉移資料過程中暫時性的snapshot,因為是用zfs destroy指令,小心誤刪其他檔案系統。
- 修改ZFS檔案系統、資料夾和CIFS分享的名稱
- 首先是ZFS檔案系統 把現有的檔案系統名稱列出來,準備改名子
- 修改資料夾名稱 不屬於ZFS的檔案系統,只是單純的資料夾,就直接用mv指令改。
- 關於windows下,[內容] => [以前的版本] 看到的內容 因為用mv改名稱,所以改名的資料夾底下,所有的[以前的版本] 都不見了,但是上層的檔案系統snapshot還在,並沒有消失,要找舊版本還是可以從上層開snapshot。
- CIFS分享的名稱 cifs的分享名稱順便改一下,改完立即生效。
- 設定COMSTAR iSCSI Target
- 建立iSCSI Logic Unit 要先啟動stmf,NexentaCore預設是啟動
- 自訂iSCSI Logic Unit的廠牌和型號 假如不喜歡預設的廠牌nexenta和硬碟型號comstar,可以用下列的指令來建立iSCSI Logic Unit ,把vid換成指定的廠牌,把pid換成指定的型號,我改成vid=XD-iSCSI,pid=64GB-test,其他依此類推。
- 建立iSCSI Target 啟動iscsi target的服務
- 自訂較簡單的iSCSI Target名稱 但是自動命名實在太長了,其實只要符合命名規則,也可以建出下列的iSCSI Target名稱。iqn似乎是固定的,.2011-05一定要年加月,原本是跟據公司的建立時間.1986-03似乎是sun的建立時間,.org原來是預設.com,.xd原來預設是.sun,:test這一段不一定要提供,參數-l是設定alias。
-
原本是打算使用napp-it來達成ZFS NAS的所有設定,但是為了確定自己使用ZFS NAS時,所需要的所有功能都沒有問題,在測試完需要的功能後,發現大部分需要的指令都用過了,所以就乾脆試試全程都用指令完成,不要去依賴napp-it的介面。
這樣只要準備好一張NexentaCore的光碟,有需要的時候加上自己的筆記,就可以很迅速的重建ZFS NAS系統。我自己試過的結果是,不包含從舊NAS轉移資料的時間,從NexentaCore的光碟安裝,到透過指令把所有的設定完成,然後ZFS NAS可以使用,大約是1個小時,算是相當快速了,只是事前的規劃都要預先完成。
安裝NexentaCore的過程這裡這裡就直接掠過。
把個人資料夾和一般收藏分成兩個ZFS檔案系統,一開始是考慮個人資料因為比較重要,可能會用copy=2的設定。同時個人資料夾會用比較高的頻率建立snapshot。所以分成兩個檔案系統比較好管理。
private
私人資料,分享的第一組ZFS檔案系統。
private/personal
私人資料/個人資料,平常掛成網路硬碟。
擁有者LouisZZZ完整讀寫,群組xd維讀,所有人預設禁止,ACL增加admin完整權限。
private/backup
私人資料/備份,平常不掛載。
擁有者Razgriz完整讀寫,群組xd維讀,所有人預設禁止,ACL增加admin完整權限。
算是很囉嗦的做法,用不同的帳號Razgriz是為了平時的主帳號LouisZZZ不要去意外修改到不必要的部份。
storage
儲存,分享的第一組ZFS檔案系統,平常掛成網路硬碟。
storage/collection (普通資料夾)
儲存/一般收藏,所以可以讓所有人看到。
擁有者Razgriz完整讀寫,群組xd維讀,所有人預設唯讀,ACL增加admin完整權限。
storage/stash (普通資料夾)
儲存/爭議性收藏,有不想讓其他人看到的,就放這裡。
擁有者Razgriz完整讀寫,群組xd維讀,所有人預設禁止,ACL增加admin完整權限。
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c1t0d0 <DEFAULT cyl 30398 alt 2 hd 255 sec 63> /pci@0,0/pci1043,81eb@1f,2/disk@0,0 1. c1t1d0 <ATA-ST32000542AS-CC34-1.82TB> /pci@0,0/pci1043,81eb@1f,2/disk@1,0 2. c1t2d0 <ATA-ST32000542AS-CC34-1.82TB> /pci@0,0/pci1043,81eb@1f,2/disk@2,0 3. c1t3d0 <ATA-ST32000542AS-CC34-1.82TB> /pci@0,0/pci1043,81eb@1f,2/disk@3,0 4. c1t4d0 <ATA-ST32000542AS-CC34-1.82TB> /pci@0,0/pci1043,81eb@1f,2/disk@4,0
建立raidz1的xd-raidz,使用raidz1來達成至少一顆硬碟的容錯,同時保有最大的有效容量。
# zpool create -f xd-raidz raidz c1t1d0 c1t2d0 c1t3d0 c1t4d0
檢查建立後的zpool狀況,確認有無異常。
# zpool status xd-raidz pool: xd-raidz state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM xd-raidz ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 c1t4d0 ONLINE 0 0 0 errors: No known data errors
檢查zpool的容量,這裡列出的是硬碟的純粹容量,並不考慮raidz1,所以是顯示7.25T
# zpool list xd-raidz NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT xd-raidz 7.25T 163K 7.25T 0% 1.00x ONLINE -
檢查zfs檔案系統下的容量,就是顯示raidz1及檔案系統設定下的有效容量,所以是5.34T,相當夠我用了。
# zfs list xd-raidz NAME USED AVAIL REFER MOUNTPOINT xd-raidz 122K 5.34T 43.4K /xd-raidz
casesensitivity=mixed 混合式大小寫,配合windows的習慣。
nbmand=on 配合檔案系統同時作NFS和CIFS分享,使用的interlock模式。
utf8only=on 檔案名稱只接受utf8的unicode編碼,不使用ansi編碼。每個參數前面都須要加上-o。
# zfs create -o casesensitivity=mixed -o nbmand=on -o utf8only=on xd-raidz/storage # zfs create -o casesensitivity=mixed -o nbmand=on -o utf8only=on xd-raidz/private
檢查建立起來的檔案系統。
# zfs list NAME USED AVAIL REFER MOUNTPOINT xd-raidz 233K 5.34T 44.9K /xd-raidz xd-raidz/private 43.4K 5.34T 43.4K /xd-raidz/private xd-raidz/storage 43.4K 5.34T 43.4K /xd-raidz/storage
建立下層資料夾
# mkdir /xd-raidz/storage/collection # mkdir /xd-raidz/storage/stash # mkdir /xd-raidz/private/personal # mkdir /xd-raidz/private/backup
# zfs set aclinherit=passthrough xd-raidz
檢查aclinherit的設定值
# zfs get aclinherit xd-raidz NAME PROPERTY VALUE SOURCE xd-raidz aclinherit passthrough local
下層的xd-raidz/storage會自動繼承
# zfs get aclinherit xd-raidz/storage NAME PROPERTY VALUE SOURCE xd-raidz/storage aclinherit passthrough inherited from xd-raidz
所以xd-raidz/private同樣會自動繼承
# zfs get aclinherit xd-raidz/private NAME PROPERTY VALUE SOURCE xd-raidz/private aclinherit passthrough inherited from xd-raidz
# vi /etc/pam.conf加入底下這一行
other password required pam_smb_passwd.so.1 nowarn
重新設定root密碼
# passwd root
# groupadd xd
建立使用者LouisZZZ屬於群組 xd
# useradd -g xd LouisZZZ
設定LouisZZZ的密碼
# passwd LouisZZZ New Password: Re-enter new Password: passwd: password successfully changed for LouisZZZ
建立使用者Razgriz屬於群組 xd
# useradd -g xd Razgriz
設定Razgriz的密碼
# passwd Razgriz New Password: Re-enter new Password: passwd: password successfully changed for Razgriz
# svcs | grep smb online 16:49:56 svc:/network/smb/server:default online 16:49:56 svc:/network/shares/group:smb
假如samba起動,關掉他,NexentaCore預設應該是沒有samba。
# svcs | grep samba # svcadm disable svc:/network/samba svcadm: Pattern 'svc:/network/samba' doesn't match any instances
加入工作群組。
# smbadm join -w XD-NETWORK After joining XD-NETWORK the smb service will be restarted automatically. Would you like to continue? [no]: y Successfully joined XD-NETWORK
把xd-raidz/private及xd-raidz/storage分別用private和storage名稱設定為CIFS分享
# zfs set sharesmb=name=private xd-raidz/private # zfs set sharesmb=name=storage xd-raidz/storage
檢查目前系統中設定的分享,看分享的路徑和名稱是否正確,還沒有完全弄清楚要怎麼看。
$ sharemgr show -vp default nfs=() smb smb=() * /var/smb/cvol c$=/var/smb/cvol smb=(abe="false" guestok="false") "Default Share" zfs zfs/xd-raidz/private nfs=() smb=() private=/xd-raidz/private zfs/xd-raidz/storage nfs=() smb=() storage=/xd-raidz/storage
特別注意chmod指令必須使用下列路徑/usr/sun/bin/中的chmod,才能正確變更ZFS檔案系統的ACL權限,因為好像OpenSource的Solaris套件,預設的程式會被換成GNU的版本,會沒辦法處理ZFS,只會得到錯誤訊息。
/xd-raidz/private的ACL權限設定為
擁有者讀寫,群組維讀,所有人預設禁止,admin完整權限
# /usr/sun/bin/chmod -R A=\ owner@:modify_set:fd:allow,\ group@:r-x---a-R-c--s:fd:allow,\ everyone@::fd:allow,\ user:admin:full_set:fd:allow \ /xd-raidz/private
/xd-raidz/storage的ACL權限設定為
擁有者讀寫,群組維讀,所有人預設唯讀,admin完整權限
# /usr/sun/bin/chmod -R A=\ owner@:modify_set:fd:allow,\ group@:r-x---a-R-c--s:fd:allow,\ everyone@:r-x---a-R-c--s:fd:allow,\ user:admin:full_set:fd:allow \ /xd-raidz/storage
/xd-raidz/storage/stash的ACL權限設定為
擁有者讀寫,群組維讀,所有人預設禁止,admin完整權限。
# /usr/sun/bin/chmod -R A=\ owner@:modify_set:fd:allow,\ group@:r-x---a-R-c--s:fd:allow,\ everyone@::fd:allow,\ user:admin:full_set:fd:allow \ /xd-raidz/storage/stash
同樣注意chown指令必須使用下列路徑/usr/sun/bin/中的chown
/xd-raidz/private設定為擁有者LouisZZZ,群組xd
# /usr/sun/bin/chown -R LouisZZZ:xd /xd-raidz/private
/xd-raidz/private/backup設定為擁有者Razgriz,群組xd
# /usr/sun/bin/chown -R Razgriz:xd /xd-raidz/private/backup
/xd-raidz/storage設定為擁有者Razgriz,群組xd
# /usr/sun/bin/chown -R Razgriz:xd /xd-raidz/storage
# svcs network/smb/client STATE STIME FMRI online 19:24:36 svc:/network/smb/client:default
smb client預設是啟動的,假如發現沒有啟動,用下列的指令啟動。
# svcadm enable -r network/smb/client
要褂載smb share之前,可以先用,smbutil指令列出分享的資料夾,例如我舊NAS的IP是192.168.0.168
# smbutil view //192.168.0.168
先建立要掛載的資料夾collection和storage
# mkdir /tmp/mnt/collection # mkdir /tmp/mnt/storage
確定一下可以讀到舊nas的資料。
# ls /mnt/collection # ls /mnt/storage
要掛載smb分享時,用下列的格式,設定帳號密碼和路徑。
# mount -F smbfs //[domain;][使用者[:密碼]@]主機/分享路徑 掛載點在NexentaCore 系統裡把舊的nas分享掛上來。
# mount -F smbfs //LouisZZZ:xxxxxxxx@192.168.0.168/XD-Collection /mnt/collection # mount -F smbfs //Razgriz:xxxxxxxx@192.168.0.168/XD-Storage /mnt/storage
首先更新套件資料
# apt-get update
接著安裝rsync
# apt-get install rsync
rsync我用到的幾個參數
-c 是我個人龜毛,因為是轉移系統,所以加上checksum比較。
-a 只是方便,舊NAS的權限複製過來也沒有作用,還是必須重設。
-v 因為要確認進度所以加上去,但是我其實只想知道,刪除掉的檔案紀錄,其他訊息我其實不需要知道。
--del 刪除目標多出來的檔案。
# rsync -av /mnt/storage /xd-raidz/private # rsync -av /mnt/collection /xd-raidz/storage
第一輪檔案複製完成後,就先建立暫時snapshot,為避免意外修改。
利用-r參數讓xd-raidz底下所有的檔案系統都用相同的snapshot名稱
# zfs snapshot -r xd-raidz@20110520
雖然檔案都一樣,不需要重新複製,但是舊NAS的全部資料還是會被rsync讀出來算checksum,所以同樣大約花了30小時左右完成。
假如第一輪的複製已經中斷過,會留下一些暫存檔案。假如在rsync沒有加上--del的刪除功能,對於目的地多出來的檔案會保留,但是目的是1:1的傳送,那些ctrl-c終止rsync留下來的暫存檔,和其他操作錯誤留下來的檔案都應該刪除,所以我用的指令改成。
# rsync -cav --del /mnt/storage /xd-raidz/private # rsync -cav --del /mnt/collection /xd-raidz/storage
# zfs snapshot -r xd-raidz@20110522-DONE
列出snapshot確認,確認snapshot有確實建立。
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT syspool/rootfs-nmu-000@initial 338M - 1.24G - temp2@20110521-2nd-ReadyNAS 0 - 36K - temp2/collection@20110521-2nd-ReadyNAS 35.2M - 1.35T - temp2/storage@20110521-2nd-ReadyNAS 646K - 133G - xd-raidz@20110520-ReadyNAS 0 - 46.4K - xd-raidz@20110521-temp 0 - 46.4K - xd-raidz@20110522-DONE 0 - 46.4K - xd-raidz/private@20110520-ReadyNAS 2.12G - 134G - xd-raidz/private@20110521-temp 23.8M - 132G - xd-raidz/private@20110521-temp2 25.4M - 133G - xd-raidz/private@20110522-DONE 0 - 133G - xd-raidz/storage@20110520-ReadyNAS 11.1G - 2.48T - xd-raidz/storage@20110521-temp 185M - 2.47T - xd-raidz/storage@20110521-temp2 185M - 2.47T - xd-raidz/storage@20110522-DONE 0 - 2.47T -
為縮短時間,第二備份不使用checksum指令,完成後同樣建立snapshot,其他細節則省略。
# rsync -av /mnt/storage /temp2 # rsync -av /mnt/collection /temp2
使用zfs hold指令
# zfs hold keep xd-raidz/storage@20110522-DONE # zfs hold keep xd-raidz/private@20110522-DONE
使用zfs holds 檢視snapshot 狀態。
# zfs holds xd-raidz/storage@20110522-DONE NAME TAG TIMESTAMP xd-raidz/storage@20110522-DONE keep Sun May 22 12:21:37 2011 # zfs holds xd-raidz/private@20110522-DONE NAME TAG TIMESTAMP xd-raidz/private@20110522-DONE keep Sun May 22 12:21:51 2011
# zfs destroy -r xd-raidz@20110521-temp
檢查刪除後的snapshot狀態
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT syspool/rootfs-nmu-000@initial 338M - 1.24G - temp2@20110521-2nd-ReadyNAS 0 - 36K - temp2/collection@20110521-2nd-ReadyNAS 35.2M - 1.35T - temp2/storage@20110521-2nd-ReadyNAS 646K - 133G - xd-raidz@20110520-ReadyNAS 0 - 46.4K - xd-raidz@20110522-DONE 0 - 46.4K - xd-raidz/private@20110520-ReadyNAS 2.12G - 134G - xd-raidz/private@20110521-temp2 67.6M - 133G - xd-raidz/private@20110522-DONE 0 - 133G - xd-raidz/storage@20110520-ReadyNAS 11.1G - 2.48T - xd-raidz/storage@20110521-temp2 232M - 2.47T - xd-raidz/storage@20110522-DONE 0 - 2.47T -
重複刪除其他不必要的snapshot,並檢查
# zfs destroy xd-raidz/private@20110521-temp2 # zfs destroy xd-raidz/storage@20110521-temp2 # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT syspool/rootfs-nmu-000@initial 338M - 1.24G - temp2@20110521-2nd-ReadyNAS 0 - 36K - temp2/collection@20110521-2nd-ReadyNAS 35.2M - 1.35T - temp2/storage@20110521-2nd-ReadyNAS 646K - 133G - xd-raidz@20110520-ReadyNAS 0 - 46.4K - xd-raidz@20110522-DONE 0 - 46.4K - xd-raidz/private@20110520-ReadyNAS 2.17G - 134G - xd-raidz/private@20110522-DONE 0 - 133G - xd-raidz/storage@20110520-ReadyNAS 11.1G - 2.48T - xd-raidz/storage@20110522-DONE 0 - 2.47T -
# zfs list NAME USED AVAIL REFER MOUNTPOINT xd-raidz 2.61T 2.72T 46.4K /xd-raidz xd-raidz/private 135G 2.72T 96.7G /xd-raidz/private xd-raidz/storage 2.48T 2.72T 2.17T /xd-raidz/storage
改成比較容易分辨的名稱
# zfs rename xd-raidz/private xd-raidz/XD-private # zfs rename xd-raidz/storage xd-raidz/XD-storage
看一下改完之後的ZFS檔案系統名稱,mount point會自動一起修改
# zfs list NAME USED AVAIL REFER MOUNTPOINT syspool 3.79G 225G 35K none syspool/dump 1.38G 225G 1.38G - syspool/rootfs-nmu-000 1.37G 225G 1.04G legacy syspool/swap 1.03G 225G 182M - xd-raidz 2.61T 2.72T 46.4K /xd-raidz xd-raidz/XD-private 135G 2.72T 96.7G /xd-raidz/XD-private xd-raidz/XD-storage 2.48T 2.72T 2.17T /xd-raidz/XD-storage
# mv collection XD-collection # mv stash XD-stash# ls XD-collection XD-stash
# mv backup XD-backup # mv personal XD-personal # ls XD-backup XD-personal
剛才改名的資料夾,假如改回原名稱,不管是用mv還是在windows底下改,在[以前的版本] 裡,過去的snapshot又會再出現,該說神奇嗎?
# zfs set sharesmb=name=XD-private xd-raidz/XD-private # zfs get sharesmb xd-raidz/XD-private NAME PROPERTY VALUE SOURCE xd-raidz/XD-private sharesmb name=XD-private local
# zfs set sharesmb=name=XD-storage xd-raidz/XD-storage # zfs get sharesmb xd-raidz/XD-storage NAME PROPERTY VALUE SOURCE xd-raidz/XD-storage sharesmb name=XD-storage local
# svcadm enable stmf
確認stmf有正確啟動
# svcs stmfSTATE STIME FMRI online 22:31:34 svc:/system/stmf:default
建立zvol,使用-V大寫參數,加上指定容量64gb及檔案系統位置xd-raidz/test。
# zfs create -V 64gb xd-raidz/test
zvol建立後,檢查/dev底下有出現名稱為test的zvol
# ls /dev/zvol/rdsk/xd-raidz XD-private XD-storage test
zvol不會出現在檔案系統中
# ls /xd-raidz XD-private XD-storage
用sbdadm把zvol建立成iSCSI Logic Unit
# sbdadm create-lu /dev/zvol/rdsk/xd-raidz/test Created the following LU: GUID DATA SIZE SOURCE -------------------------------- ------------------- ---------------- 600144f006b0070000004dde65a80001 68719476736 /dev/zvol/rdsk/xd-raidz/test
檢視建立好的iSCSI Logic Unit,sbdadm。
# sbdadm list-lu Found 1 LU(s) GUID DATA SIZE SOURCE -------------------------------- ------------------- ---------------- 600144f006b0070000004dde65a80001 68719476736 /dev/zvol/rdsk/xd-raidz/test
檢視建立好的iSCSI Logic Unit,用stmfadm。
# stmfadm list-lu LU Name: 600144F006B0070000004DDE65A80001
iSCSI Logic Unit還要加入view在initialator中才看的到。
# stmfadm add-view 600144F006B0070000004DDE65A80001
檢視剛剛iSCSI Logic Unit的view設定
# stmfadm list-view -l 600144F006B0070000004DDE65A80001 View Entry: 0 Host group : All Target group : All LUN : 0
至於stmfadm和sbdadm建立的lu有什麼實際上的差異,還要待確認。
# stmfadm create-lu -p vid=vid -p pid=pid -p serial=serial /dev/zvol/rdsk/xd-raidz/test2 Logical unit created: 600144F006B0070000004DDE740B0005
# svcadm enable -r svc:/network/iscsi/target:default svcadm: svc:/milestone/network depends on svc:/network/physical, which has multiple instances.
檢查iSCSI Target相關服務的狀況
# svcs -l iscsi/target fmri svc:/network/iscsi/target:default name iscsi target enabled true state online next_state none state_time Thu May 26 22:41:07 2011 logfile /var/svc/log/network-iscsi-target:default.log restarter svc:/system/svc/restarter:default dependency require_any/error svc:/milestone/network (online) dependency require_all/none svc:/system/stmf:default (online)
建立iSCSI Target,不指定target時,會自動幫你命名。
# itadm create-target Target iqn.1986-03.com.sun:02:7c292a10-0dfd-40d7-c4f7-db4c7e448303 successfully created
檢視所有建立的iSCSI Target
# itadm list-target -v TARGET NAME STATE SESSIONS iqn.1986-03.com.sun:02:7c292a10-0dfd-40d7-c4f7-db4c7e448303 online 0 alias: - auth: none (defaults) targetchapuser: - targetchapsecret: unset tpg-tags: default
# itadm create-target -n iqn.2011-05.org.virtual-on:test -l test1 Target iqn.2011-05.org.virtual-on:test successfully created
再列出已經建的iSCSI Target
# itadm list-target -v TARGET NAME STATE SESSIONS iqn.2011-05.org.virtual-on:test online 0 alias: test1 auth: none (defaults) targetchapuser: - targetchapsecret: unset tpg-tags: default iqn.1986-03.com.sun:02:7c292a10-0dfd-40d7-c4f7-db4c7e448303 online 0 alias: - auth: none (defaults) targetchapuser: - targetchapsecret: unset tpg-tags: default
23 則留言:
From OSSLab thx.
你ZFS資料不錯.方便收錄在我們網站嗎?
http://www.osslab.com.tw/
請用,幫我加個連結註明出處就可以了。
之前設定iSCSI的方法很簡單zfs set shareiscsi=on就行了,但好像在v134以後的版本就變了,變成你上面的方法,不知道是為什麼?
我也是參考louiszzz兄的介紹才把iSCSI裝起來,不過還是不太了解到底為什麼要那樣做,能請louiszzz兄稍微講解一下嗎?
另外,還有兩個問題想請教?
1.iSCSI架立後,Server --> Client,也就是iSCSI硬碟的讀取異常低落,只有26MB/s左右,不曉得您那邊的測試會嗎?
2.建立iSCSI Target後,除了Client端可以管理iSCSI硬碟外,Server端看不到這個檔案,也無法管理,那日後若出問題時,要怎麼處理呢?
1. 因為我沒有用過zfs set shareiscsi=on的方法,所以幫不上忙。
google一下,似乎是有Bug。
2. iSCSI之前隨手測的,用FastCopy在Win7 x64(RAID10)底下,對NAS(RAIDZ)連續讀取約65MB/sec,連續寫入57MB/sec。換用檔案總管,讀42MB/sec,寫40MN/sec。
沒有做額外的最佳化。
3. 你應該是指iSCSI硬碟的內容吧?就和實體硬碟一樣,需要任何一台機器存取時,就用該機器的iSCSI initiator,連接iSCSI target,就算在Server端也一樣,用initiator去連接在同一台Server的target。
至於zvol,這是ZFS的一部分,建立流程就差不多是管理流程。
1.我的意思是,ZFS在分享這方面簡化了許多繁雜的設定,只要設定set sharesmb、set sharenfs就可以了,不用多做設定。而之前的版本也是有set shareiscsi(雖然我也沒用過),只是不曉得為什麼在後面的版本拿掉了?相較現在的設定,真的是繁複許多…
2.iSCSI硬碟這部份我的意思是,若Server在down或是maintain的狀態下,在Server端似乎無法對iSCSI硬碟做任何的處理,因為連看都不看不到。Win2008的iSCSI Target至少還知道是使用存放在哪的VHD檔。
3.我做了一些有關網路的傳輸測試,我把數據整理出來。其中,Solaris的傳輸效能遠比我想像中來的低落。若有機會,我想跟您討論這部份,謝謝!
http://blog.xuite.net/trad546/blog
1.
zfs set shareiscsi=on的方法,我是找到下列這一篇,但是我沒有試過
https://blogs.oracle.com/mhuff/entry/introduction_to_iscsi_in_solaris
,文章內除了一部分設定用預設值外,因為target和view等項目雖然設定成不同形式,但是還是必須進行設定。
我是認為該設定的還是必須設定,避不開的。
2.
以我的例子中,建立zvol做為iSCSI用的Block Device:
# zfs create -V 64gb xd-raidz/test
zvol建立後,檢查/dev底下有出現名稱為test的zvol
# ls /dev/zvol/rdsk/xd-raidz
XD-private XD-storage test
上述例子中名稱為test的zvol,可以用ls在/dev/zvol/rdsk/xd-raidz底下看到,這個zvol就應該是類似VHD檔的存在,部分zfs的管理指令如snapshot/clone/send之類,應該是可以正常作用的。
我不能理解為何看不到和無法管理。
3.
效能部分,我會提到沒有做額外的最佳化,是因為我根本不知道要如何最佳化,目前也沒有在用iSCSI。
真要比較效能差異,可能測試方法要明確和統一才行,我有稍微看一下你的數據,可能在測試方法上差異太大,我的數據看就好。
FastCopy似乎有些限制在,原因不明。
在NAS端可以試試
zpool iostat -v 1
看pool的讀寫狀況
和
iostat -xncvM 1
看cpu使用率和硬碟讀寫
看看瓶頸在哪了。
即時的網路流量監控也可以看一下。
有時候畫面上完成,但是因為非同步寫入的要求,網路還沒結束(印象中iSCSI好像比較明顯),zpool寫入也還沒完成。
你說的沒錯啦,zvol底下是存在的,是我被傳統的觀念制約了。雖然是用zfs指命建立的,但不管是用zfs還是zpool都看不到相關訊息,只知道是空間被佔用了,不知道是什麼…
我想我也不會用iSCSI,太麻煩了,除了在小檔案的傳輸表現不錯外,其他似乎沒有太吸引人的地方。我也只是順便做測試而巳…
其實最讓我困惑的是Solaris網路傳輸效能不如預期。讓我困惑的部份在於,通常網路傳輸瓶頸在於儲存媒體的存取速度不足以應付網路傳輸,因此我在測試前均做了本機磁碟的傳輸測試。測試數據表明本機磁碟的傳輸能力足以應付網路傳輸。
若瓶頸不在磁碟存取速度上,那麼問題就出在網路傳輸協定上了。不過似乎也不是,因為透過快取而非從磁碟讀取的傳輸,確實能達到網路傳輸的上限。而這就是一直困擾我的事,若不是磁碟存取速度,也非網路傳輸協定,那造成這種現象的問題到底是什麼?
這幾天安裝了Nexentastor來測試,我想這套專門設計作為NAS的系統或許可以幫我找到問題的答案。其中有兩個發現:
第一,Nexenta系統在「Win7->Solaris」小檔案的傳輸有增長,由原本的5MB->14MB左右,其他數據不變。
第二,問題確實是由ZFS引起的。雖然磁碟能提供更快的存取速度,但只要是透過網路讀取,大檔案就會被限制在60-70MB,小檔案會被限制在6-7MB左右,不管Pool是Single、Stripe、Mirror還是Raidz。透過Nexenta系統的監控畫面可以較容易發現這一點。
所以這很可能是有關ZFS效能的問題。ZFS效能關鍵不外乎讀取的ARC及寫入的ZIL,之前還此研究了一下ZIL,只不過像網路傳輸這樣的synchronous I/O,比較有影響的應該是資料的寫入而非讀取。但實際上卻是讀取的效能低於寫入,這跟我們一般讀取大於寫入的傳統印象不同,這是我所不解的地方。很可惜的,我沒有SSD可以測試L2ARC的部份…
另外,Solaris系統一般多應用在server上,也就是說透過網路,通常資料的讀取會比寫入多得多。而這樣的表現讓我很難相信它的能力僅止於此,或許問題不在Solaris身上,而是Win7搞得鬼,改天再來測測看...
對於這個問題,不知louiszzz兄有什麼看法?
不好意思,再請教一個問題。我把client端更改為solaris express 11,去mount server端的cifs share。可以正常mount,不過要cp檔案到client端時總是出現permission denied,即使設定為777也一樣。同樣的,cp檔案到server端也是一樣,這跟ZFS的ACL有關嗎?可是client端是Win7時就沒有這種問題,不解…
zvol是可以用zfs指令列出來的。
zfs list -t volume
和snapshot類似,要加上-t指定列出屬於volume的檔案系統。
試試看。
以CIFS為例子,XP是實做SMB,vista(SMB2.0)和win7(SMB2.1),效能上就有很大的差異。
我自己的機器,從ZFS NAS讀取資料,在XP底下就只能跑到讀取40MB/s,同樣硬體換成win7就能跑到100MB/s。
但是只要搭配win7能夠接近跑滿GBE上限,我會認定ZFS本身是ok的,效能瓶頸,未必能算在ZFS上。
因為軟硬體的組合實在太多,網路上也有用XP跑到讀取100MB/s的例子(雖然不是ZFS NAS),但我就是沒辦法在XP上試出來,有些組合就是不適合。
關於小檔案部分,同樣未必是ZFS的問題,因為可能已經跑到機械式硬碟的IOPS上限了,一般單顆SATA大約在100 IOPS上下,能到200 IOPS已經是SAS 15k才有的水準,機械式硬碟的IOPS就是這麼低。
利用下列的指令
zpool iostat -v 1
在進行小檔案的測試中觀察operations這一項,假如單顆硬碟已經到了100上下,已經很不錯了。
這部分先不考慮同步或非同步,甚至iSCSI target是否會做快取等情況。
我原本也以為網路傳輸會是synchronous I/O,結果卻不一定是。
之前的ZIL測試(沒有整理出來的)有發現
xp cifs搭配crystal disk mark是syn write。
win7 cifs搭配crystal disk mark是asy write。
windows內建和fastcopy是asy write。
xp iSCSI是asy write。
win7 iSCSI是asy write (win7用iscsi開機是syn write)。
完全不知道原因,聽說NFS會是syn write,但是我沒有測試過。
不過看看我之前的設數據就算是asy write會先寫入記憶體,再正式寫入zpool,隨機寫入還是很差。但是那時沒有觀察記錄zpool的operations,不確定IOPS是否是限制。
讀取的效能低於寫入,這我就不知道了,雖然我的測試結果中寫入似乎一直比讀取快,但是不確定原因。
用zpool iostat -v 1時
可以把時間由1秒加長到10秒,統計數據會比較平均一點,剛剛用照片測試raidz的讀取,SATA單顆硬碟IOPS好像接近130上下。
mount時的使用者帳號正確嗎?
因為讀寫cifs mount權限是看mount使用的帳號。
然後讀寫local檔案權限看你的登入帳號,因為偷懶的關係我是用root帳號寫入local的ZFS,完成之後再變更所有檔案的ACL權限。
我沒有單獨設定unix權限,所以不確定777有何影響,可能要看permission denied是來自哪邊。
我發現了一個可能的因素,但是不太確定,也不太滿意,不過我也找不出其他原因了…
http://blog.xuite.net/trad546/blog/58200007
大概就這樣了,這個問題只好先丟到一旁,繼續我下面的測試。
稍微提醒一下
NexentaStor的Optimize I/O performance這個選項和ZIL沒有關係。
這是因為ZFS會用flushing的指令,來確保硬碟cache中的資料已經確實寫入。
選項的說明裡會強調要有UPS或NVRAM保護,因為關掉ZFS cache flushing的功能後,可能發生因為發生斷電或異常,但是因為ZFS不會用flushing指令去確認硬碟cache內的資料已經完成寫入,所以就失去了硬碟cache內的待寫入資料。
ZFS會希望直接控制硬碟,要確定flushing指令可以正確作用,大概也是其中一個主要理由。
個人使用沒有大容量需求時NexentaStor的免費版真的很方便,只可惜用在我的硬體上,會週期性的失去反應。
关于 “加上透過CIFS在windows底下,可以直接在[內容] => [以前的版本] 看到過去snapshot的內容,ZFS這點真是棒的沒話說。” 这里,没看懂,没有实作成功。是要开启Windows7的系统保护吗?还是ZFS本身的功能?不太会用。可否赐教?
我用FreeBSD 9.0 实作 ZFS。
我可能沒有寫清楚,這個需要透過Solaris核心整合的CIFS,才能把ZFS的snapshot偽裝成Windows底下的還原點。
FreeBSD使用的SAMBA似乎沒有這個功能。
假如在Soalris底下使用SAMBA一樣會無法使用這個功能。
張貼留言