- 前言
- OmniOS安裝後基本設定
- 預先規劃
- 建立zpool和設定zfs檔案系統
- 建立帳號、CIFS分享和ACL權限設定
- 安裝rsync作為轉移資料的工具,並進行轉移資料
ZFS NAS V2 - 使用OmniOS實做:(1) 建立、轉移、整理
因為原本使用NexentaCore已經不再更新,所以在簡單測試後選擇了OmniOS。
OmniOS使用繼承了OpenSolaris的Illumos核心,保留了整合在核心的CIFS分享,和理論上最高效率的ZFS核心,同時因為主要為server用途,沒有不必要的桌面環境。
安裝OmniOS的過程這裡這裡就直接省略。
-
首先是設定網路好方便用putty遠端登入操作
OmniOS預設的root帳號沒有密碼
列出可用的網路介面
# dladm show-phys
把其中一個e1000g0界面建立起來,連上ADSL router,當對外界面
# ipadm create-if e1000g0
使用DHCP模式 create-addr設定位址 -T dhcp代表使用DHCP模式 e1000g0/v4設定介面使用ip v4
# ipadm create-addr -T dhcp e1000g0/v4
假如使用靜態IP (IP不會因為DHCP變動,方便網域內PC遠端登入設定)
create-addr設定位址
-T static代表使用靜態IP模式
-a 192.168.1.192/24指定IP(選一個ADSL router DHCP不會重複的IP)
e1000g0/v4static設定介面使用靜態IP v4
# ipadm create-addr -T static -a 192.168.1.192/24 e1000g0/v4static
把第二個e1000g1界面建立起來,當對內NAS界面
# ipadm create-if e1000g1
對內使用靜態ip
# ipadm create-addr -T static -a 192.168.0.192/24 e1000g1/v4static
檢查設定完成的網路介面
# ipadm show-addr
要修改ip模式,可以用下列指令把建立的ip消除,再重新建立
# ipadm delete-addr e1000g0/V4static
使用靜態ip又要對外連線
就要設定路由表,設定預設路由指向ADSL分享器
# route -p add default 192.168.1.1
檢查路由
# netstat -rn -finet Routing Table: IPv4 Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ---------- --------- default 192.168.1.1 UG 1 0 127.0.0.1 127.0.0.1 UH 2 0 lo0 192.168.1.0 192.168.1.109 U 4 2295 e1000g0
以及設定DNS指向ADSL分享器
# echo 'nameserver 192.168.1.1' >> /etc/resolv.conf
下兩行來自OmniOS安裝指示,看不懂直接照做
# cp /etc/nsswitch.conf{,.bak} # cp /etc/nsswitch.{dns,conf}
準備遠端登入帳號 首先把root加上密碼
# passwd root
增加遠端登入的admin帳號
# useradd admin # passwd admin
用putty連線操作,先用admin登入,再用su指令取得root權限,剩下就都在遠端登入下操作了。
-
ZFS NAS V2的CIFS分享結構
這次簡化一些,把私人資料夾和一般收藏分成兩個ZFS檔案系統。
用不同的帳號Razgriz是為了平時的主帳號LouisZZZ不要去意外修改到不必要的部份。
private
私人資料,分享的第一組ZFS檔案系統,平常掛成網路硬碟。
擁有者LouisZZZ完整讀寫,群組xd維讀,所有人預設禁止,ACL增加admin完整權限。
storage
儲存,分享的第一組ZFS檔案系統,平常掛成網路硬碟。
擁有者Razgriz完整讀寫,群組xd維讀,所有人預設唯讀,ACL增加admin完整權限。
-
建立zpool
列出硬碟,利用format指令,列出後用ctrl+c取消。
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c1t5000C50030A0EC7Cd0/scsi_vhci/disk@g5000c50030a0ec7c 1. c1t5000C50030BBA036d0 /scsi_vhci/disk@g5000c50030bba036 2. c1t5000C50030D6904Fd0 /scsi_vhci/disk@g5000c50030d6904f 3. c1t5000CCA22ECB0CDDd0 /scsi_vhci/disk@g5000cca22ecb0cdd 4. c1t5000CCA22ECB0D56d0 /scsi_vhci/disk@g5000cca22ecb0d56 5. c1t5000CCA22ECB1F14d0 /scsi_vhci/disk@g5000cca22ecb1f14 6. c1t5000CCA22ECBB515d0 /scsi_vhci/disk@g5000cca22ecbb515 7. c1t5000CCA222DBC3C1d0 /scsi_vhci/disk@g5000cca222dbc3c1 8. c3t0d0 /pci@0,0/pci1043,8497@1f,2/disk@0,0
建立raidz1的v2-raidz,使用raidz1來達成至少一顆硬碟的容錯,同時保有最大的有效容量。
# zpool create v2-raidz raidz c1t5000CCA22ECB0CDDd0 c1t5000CCA22ECB0D56d0 c1t5000CCA22ECB1F14d0 c1t5000CCA22ECBB515d
檢查建立後的zpool狀況,確認有無異常。
# zpool status v2-raidz pool: v2-raidz state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM v2-raidz ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 c1t5000CCA22ECB0CDDd0 ONLINE 0 0 0 c1t5000CCA22ECB0D56d0 ONLINE 0 0 0 c1t5000CCA22ECB1F14d0 ONLINE 0 0 0 c1t5000CCA22ECBB515d0 ONLINE 0 0 0 errors: No known data errors
檢查zpool的容量,這裡列出的是硬碟的純粹容量,並不考慮raidz1,所以是顯示7.25T
# zpool list v2-raidz NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT v2-raidz 14.5T 576K 14.5T - 0% 0% 1.00x ONLINE -
檢查zfs檔案系統下的容量,就是顯示raidz1及檔案系統設定下的有效容量。
# zfs list v2-raidz NAME USED AVAIL REFER MOUNTPOINT v2-raidz 349K 10.2T 140K /v2-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 v2-raidz/storage # zfs create -o casesensitivity=mixed -o nbmand=on -o utf8only=on v2-raidz/private
檢查建立起來的檔案系統。
# zfs list NAME USED AVAIL REFER MOUNTPOINT v2-raidz 680K 10.2T 140K /v2-raidz v2-raidz/private 140K 10.2T 140K /v2-raidz/private v2-raidz/storage 140K 10.2T 140K /v2-raidz/storage
-
建立帳號
建立CIFS密碼,使用vi編輯/etc/pam.conf加入底下這一行
other password required pam_smb_passwd.so.1 nowarn
# echo 'other password required pam_smb_passwd.so.1 nowarn' >> /etc/pam.conf
重新設定root密碼
# passwd root
以下根據預先完成的規劃進行 建立群組xd
# 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
開始設定CIFS分享 確認啟動OmniOS核心的相關CIFS服務
手動啟動
# svcadm enable -r smb/server
確認啟動
# svcs | grep smb online 10:00:21 svc:/network/smb/client:default online 10:00:21 svc:/network/smb/server:default online 10:00:22 svc:/network/shares/group:smb
加入工作群組。
# 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
把v2-raidz/private及v2-raidz/storage分別用XD-private和XD-storage名稱設定為CIFS分享
# zfs set sharesmb=name=XD-private v2-raidz/private # zfs set sharesmb=name=XD-storage v2-raidz/storage
檢查目前系統中設定的分享,看分享的路徑和名稱是否正確,還沒有完全弄清楚要怎麼看。
# sharemgr show -vp default nfs=() smb smb=() * /var/smb/cvol c$=/var/smb/cvol smb=(abe="false" guestok="false") "Default Share" zfs smb=() nfs=() zfs/v2-raidz/private smb=() XD-private=/v2-raidz/private zfs/v2-raidz/storage smb=() XD-storage=/v2-raidz/storage zfs/xd-raidz/XD-private nfs=() smb=() v1-private=/xd-raidz/XD-private zfs/xd-raidz/XD-storage nfs=() smb=() v1-storage=/xd-raidz/XD-storage
檢查ACL繼承設定
把aclinherit設定成passthrough,我只記得設定成後passthrough實驗後符合需求,理由沒有紀錄到。
# zfs set aclinherit=passthrough v2-raidz
檢查aclinherit的設定值
# zfs get aclinherit v2-raidz NAME PROPERTY VALUE SOURCE v2-raidz aclinherit passthrough local
下層的v2-raidz/storage會自動繼承
# zfs get aclinherit v2-raidz/storage NAME PROPERTY VALUE SOURCE v2-raidz/storage aclinherit passthrough inherited from v2-raidz
所以v2-raidz/private同樣會自動繼承
# zfs get aclinherit v2-raidz/private NAME PROPERTY VALUE SOURCE v2-raidz/private aclinherit passthrough inherited from v2-raidz
設定ACL權限
預設的read_set會沒辦法展開資料夾,所以只好加上x,變成r-x---a-R-c--s,才能在windows底下展開資料夾。其他的modify_set和full_set都沒有問題。說明是說權限加有r就能展開目錄,但是我試不出來。
設定owner及group
/v2-raidz/private設定為擁有者LouisZZZ,群組xd
# chown -R LouisZZZ:xd /v2-raidz/private
/v2-raidz/storage設定為擁有者Razgriz,群組xd
# chown -R Razgriz:xd /v2-raidz/storage
/v2-raidz/private的ACL權限設定為
擁有者讀寫,群組維讀,所有人預設禁止,admin完整權限
# 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 \ /v2-raidz/private
/v2-raidz/storage的ACL權限設定為
擁有者讀寫,群組維讀,所有人預設唯讀,admin完整權限
# 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 \ /v2-raidz/storage
owner和ACL設定,假如沒有要透過其他的電腦從CIFS轉移資料,這部分其實等檔案轉移完再進行。
# pkg search rsync INDEX ACTION VALUE PACKAGE basename file usr/bin/rsync pkg:/network/rsync@3.1.1-0.151014 pkg.descr set rsync - faster, flexible replacement for rcp pkg:/network/rsync@3.1.1-0.151014 pkg.fmri set omnios/network/rsync pkg:/network/rsync@3.1.1-0.151014 pkg.summary set rsync - faster, flexible replacement for rcp pkg:/network/rsync@3.1.1-0.151014
# pkg install rsync
rsync我用到的幾個參數
-c 是我個人龜毛,因為是轉移系統,所以加上checksum比較。
-a 只是方便,舊NAS的權限複製過來也沒有作用,還是必須重設。
-v 因為要確認進度所以加上去,但是我其實只想知道,刪除掉的檔案紀錄,其他訊息我其實不需要知道。
-q 安靜模式,略過正常資訊,僅顯示錯誤訊息
--del 刪除目標多出來的檔案。
第一輪先做轉移資料
先跑單純的複製,所以不使用-c的chcksum比較。
這次把舊ZFS硬碟裝入新NAS,直接rsync進行檔案複製
# rsync -av /xd-raidz/XD-private/ /v2-raidz/private # rsync -av /xd-raidz/XD-storage/ /v2-raidz/storage
複製完成後,建立snapshot避免意外。
# zfs snapshot v2-raidz/private@20150924 # zfs snapshot v2-raidz/storage@20150924
列出snapshot確認,確認snapshot有確實建立。
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/omnios-1@install 293M - 1.59G - rpool/ROOT/omnios-1@2015-09-18-10:47:38 301M - 1.61G - rpool/ROOT/omnios-1@2015-09-21-14:56:31 311M - 1.74G - v2-raidz/private@20150924 0 - 1.51T - v2-raidz/storage@20150924 2.09M - 2.46T - xd-raidz@20110522-DONE 31.4K - 46.4K - xd-raidz@20121118 0 - 46.4K - xd-raidz/XD-private@20111107 30.2G - 339G - xd-raidz/XD-private@20120709 1.55M - 416G - xd-raidz/XD-private@20121118 1.85M - 504G - xd-raidz/XD-private@20130623 173G - 677G - xd-raidz/XD-private@20140816 267G - 1.40T - xd-raidz/XD-storage@20111107 199G - 2.39T - xd-raidz/XD-storage@20120709 1.12G - 2.32T - xd-raidz/XD-storage@20121118 7.21G - 2.41T - xd-raidz/XD-storage@20130623 1.96G - 2.42T - xd-raidz/XD-storage@20140816 44.4G - 2.43T -
第二輪作資料比對
針對已經複製完成的資料,再做第二輪的checksum比對,所以加上-c 表示使用checksum比較。
假如第一輪的複製已經中斷過,會留下一些暫存檔案。假如在rsync沒有加上--del的刪除功能,對於目的地多出來的檔案會保留,但是目的是1:1的傳送,那些ctrl-c終止rsync留下來的暫存檔,和其他操作錯誤留下來的檔案都應該刪除。
所以我用的指令改成。
# rsync -cav --del /xd-raidz/XD-private/ /v2-raidz/private > /v2-raidz/private.txt # rsync -cav --del /xd-raidz/XD-storage/ /v2-raidz/storage > /v2-raidz/storage.txt
用hold把重要的snapshot設定為keep狀態
最終檢查完成後,確認所有檔案都正確,且更正權限後,除了建立snapshot,再額外用hold把snapshot設定為keep狀態,同樣是避免snapshot被意外修改。
使用zfs hold指令
# zfs hold keep v2-raidz/private@20150924 # zfs hold keep v2-raidz/storage@20150924
使用zfs holds 檢視snapshot 狀態。
# zfs holds v2-raidz/storage@20150924 NAME TAG TIMESTAMP v2-raidz/storage@20150924 keep Thu Sep 24 23:37 2015
# zfs holds v2-raidz/private@20150924 NAME TAG TIMESTAMP v2-raidz/private@20150924 keep Thu Sep 24 23:37 2015
沒有留言:
張貼留言