2016年12月21日 星期三

DNS 未經過授權 解說

記得在多年前對 DNS 濛濛懂懂的年代在�� nslookup 工具查詢網址時都會有個疑問,那就是在查詢的過程中經常都會遇到查詢的結果顯示 未經授權的回答 Non-authoritative answer ) 的提示,看不懂是什麼意思,最近剛好有人在問我這個問題,所幸就把我知道的給寫出來跟大家分享。
前幾天寫的【釐清 DNS Client 查詢過程的異象 ( 當名稱伺服器停用遞迴時 ) 】文章講的是 DNS 查詢會有遞迴查詢的觀念,當 DNS 伺服器啟用了遞迴查詢的功能後,當使用 DNS Client ( 例如 nslookup ) 就可以透過這台 DNS 伺服器查到任何一個域名(Domain Name)。
以下是使用 nslookup 查詢的一個範例:
C:\>nslookup -type=a www.miniasp.com 168.95.1.1
伺服器:  dns.hinet.net
Address:  168.95.1.1

未經授權的回答:
名稱:    miniasp.com
Address:  58.86.49.47
Aliases:  www.miniasp.com
以下是執行 nslookup 指令時的圖示:


在這裡的 未經授權的回答 (Non-authoritative answer) 是微軟的制式翻譯,這裡的中文翻譯其實很容易被人們誤解為跟「權限」有關的問題,但事實上跟「權限」一點關係都沒有!
其實 DNS 伺服器在啟用遞迴查詢時 (Microsoft DNS 預設是啟用的),其流程如下:
  1. 用戶端 ( DNS Client , nslookup ) 從電腦註冊的 DNS 伺服器 ( Name Server , NS ) 查詢域名。
  2. 當你本機所指定的 DNS 伺服器 ( NS ) 在這台 NS 找不到任何快取記錄時,這時就會開始 遞迴查詢 (Recursive Query) 或 反覆查詢 (Iterative Query) 的過程,透過這個過程幫你找出最終的域名所屬的 IP 位址 ( A 紀錄 ) 或其他類型的 DNS 紀錄。如果已經有快取資料在的話,就會直接回應先前查詢過的結果給用戶端。
以下解釋 遞迴查詢 (Recursive Query) 或 反覆查詢 (Iterative Query) 的差別:
遞迴查詢 是指這台 NS 會幫你透過其他台 NS 查詢資料,也就是透過 DNS 伺服器所設定的 轉寄站 (Forwarder) 幫你查詢出結果,這種設定對你的 NS 的負擔比較輕,因為如此一來你這台 NS 就只要把查詢的任務交給其他台 NS 幫你查詢出結果就行了,一般來說大部分的 NS 都是這樣設定的。
以 Microsoft DNS 來說,只要有設定「轉寄站」的 DNS 伺服器就等於是啟用「遞迴查詢」的方式運作:


反覆查詢 是會直接在這台 NS 幫你一步一步的查詢出這個域名的結果,也就是如下圖的方式一步一步的反覆查詢出結果:
以上圖查詢 girlgirl.gbrmpa.gov.au 這筆 A 紀錄 (Address Record) 為例,其執行反覆查詢的流程如下:
  1. Resolver 向 Name Server 查詢一個域名 ( girlgirl.gbrmpa.gov.au )
  2. 由於 Name Server 並無任何快取紀錄,又沒有 轉寄站 (Forwarder) 可使用時,就會啟用反覆查詢,並且從 根提示 ( Root Hint ) 開始查起,首先先查出 gTLD 或 ccTLD 的 NS 紀錄 ( 如上圖 Refer to au NS 說明 )
  3. 再透過 gTLD 或 ccTLD 查出 gov.au 這筆 NS 紀錄 ( 如上圖 Refer to gov.au NS 說明 )
  4. 再透過 gov.au 這筆 NS 紀錄查出 gbrmpa.gov.au 這筆 NS 紀錄
  5. 再透過 gbrmpa.gov.au 這筆 NS 紀錄查出 girlgirl.gbrmpa.gov.au 這筆 A 紀錄
如上述步驟 1 ~ 5 有個很重要的觀念,也就是從頭到尾都是不斷的向 NS 查詢 girlgirl.gbrmpa.gov.au 這筆 A 紀錄,只是當查不到 A 記錄的時候,就會回傳該 NS 所擁有的 NS 紀錄,如此一來才能都過反覆的方式逐一找到最終要查詢的 A 記錄。
接下來我要對我上述對 DNS 的理解所進行的觀念驗證 ( PoC ) 步驟,以下將會以查詢 blog.miniasp.com 這筆 A 記錄的反覆查詢過程為主,我會使用 nslookup 工具完成所有的反覆查詢動作,以模擬 DNS 伺服器在做反覆查詢時的過程:
由於我們要先從「根提示」所提供的 Root Nameserver 開始查起,所以我們先參考 Microsoft DNS 中定義的 Root NS 開始查詢起,任意選壹台 NS 都可以。

1. 先查詢 Root Hints 的資料,當查不到資料時,請注意如下的結果中有個 Served by: 字樣,這就代表這個域名可以透過如下的 Nameserver 找到進一步的資料!
C:\>nslookup -type=a blog.miniasp.com 198.41.0.4
198.in-addr.arpa        nameserver = U.ARIN.NET
198.in-addr.arpa        nameserver = DILL.ARIN.NET
198.in-addr.arpa        nameserver = W.ARIN.NET
198.in-addr.arpa        nameserver = V.ARIN.NET
198.in-addr.arpa        nameserver = X.ARIN.NET
198.in-addr.arpa        nameserver = Z.ARIN.NET
198.in-addr.arpa        nameserver = T.ARIN.NET
198.in-addr.arpa        nameserver = Y.ARIN.NET
伺服器:  UnKnown
Address:  198.41.0.4

名稱:    blog.miniasp.com
Served by:
- i.gtld-servers.net
          192.43.172.30
          com
- a.gtld-servers.net
          192.5.6.30
          2001:503:a83e::2:30
          com
- g.gtld-servers.net
          192.42.93.30
          com
- d.gtld-servers.net
          192.31.80.30
          com
- k.gtld-servers.net
          192.52.178.30
          com
- b.gtld-servers.net
          192.33.14.30
          2001:503:231d::2:30
          com
- j.gtld-servers.net
          192.48.79.30
          com
- l.gtld-servers.net
          192.41.162.30
          com
- f.gtld-servers.net
          192.35.51.30
          com
- e.gtld-servers.net
          192.12.94.30
          com
2. 我們再任意選壹筆他建議的 Nameserver 查詢 blog.miniasp.com 這筆 A 記錄,透過這次的結果已經可以看出這兩台已經看到是由我們公司自行管理的 NS 伺服器了,不過這時還沒查到最終的 A 紀錄,所以還要走一次反覆查詢。
注意: miniasp.com 這個域名的 NS 紀錄必須從 gTLD 查到,而非你自行管理的 DNS 伺服器喔,且該 gTLD 上的紀錄只能透過 域名註冊商 ( domain name registrar ) 那邊幫你註冊進 gTLD 裡,你自己是無法進行登錄的,相關文章請參考【在國內外各家域名註冊商更新 Nameserver 紀錄的注意事項】。
C:\>nslookup -type=a blog.miniasp.com 192.12.94.30
(root)  nameserver = f.root-servers.net
(root)  nameserver = g.root-servers.net
(root)  nameserver = h.root-servers.net
(root)  nameserver = i.root-servers.net
(root)  nameserver = j.root-servers.net
(root)  nameserver = k.root-servers.net
(root)  nameserver = l.root-servers.net
(root)  nameserver = m.root-servers.net
(root)  nameserver = a.root-servers.net
(root)  nameserver = b.root-servers.net
(root)  nameserver = c.root-servers.net
(root)  nameserver = d.root-servers.net
(root)  nameserver = e.root-servers.net
伺服器:  UnKnown
Address:  192.12.94.30

名稱:    blog.miniasp.com
Served by:
- ns2.miniasp.com
          61.56.130.54
          miniasp.com
- ns1kbt.miniasp.com
          58.86.49.53
          miniasp.com
3. 接著,我們再任意選壹筆他建議的 Nameserver 查詢 blog.miniasp.com 這筆 A 記錄,這次的結果就已經正式出爐了,請看下圖 Address 欄位就是我們要的答案,不過這裡顯示的「名稱」欄位卻不是我們指定的域名,我們所查出的域名是出現在 Aliases 欄位,這代表了 blog.miniasp.com 這筆資料的記錄類型並不是一個 A 紀錄,而是一個 CNAME (別名) 紀錄。
C:\>nslookup -type=a blog.miniasp.com 58.86.49.53
伺服器:  UnKnown
Address:  58.86.49.53

名稱:    cisa.miniasp.com
Address:  58.86.49.46
Aliases:  blog.miniasp.com
4. 雖然我們已經查出 blog.miniasp.com 所對應的 IP 位址,但事實上 NS 伺服器在查到這筆記錄後,還會再到如上的這個名稱 cisa.miniasp.com 查詢出最終的 A 紀錄,這時才會完成所有反覆查詢的步驟。
我們先模擬查詢 CNAME 紀錄,得到的 canonical name 結果是 cisa.miniasp.com :
C:\>nslookup -type=cname blog.miniasp.com 58.86.49.53
伺服器:  UnKnown
Address:  58.86.49.53

blog.miniasp.com        canonical name = cisa.miniasp.com
miniasp.com     nameserver = ns1kbt.miniasp.com
miniasp.com     nameserver = ns2.miniasp.com
ns1kbt.miniasp.com      internet address = 58.86.49.53
ns2.miniasp.com internet address = 61.56.130.54
然後再查詢 cisa.miniasp.com 的 A 紀錄,走到這一步所有 DNS 查詢的過程終於執行完畢!
C:\>nslookup -type=a cisa.miniasp.com 58.86.49.53
伺服器:  UnKnown
Address:  58.86.49.53

名稱:    cisa.miniasp.com
Address:  58.86.49.46
最後,請各位再回顧一下上述 PoC 的過程是否有任何一次查詢出現 未經授權的回答 (Non-authoritative answer) 的訊息?並沒有!因為這些查詢都是 權威的答案 (authoritative answer),也是可靠的答案的意思,也代表這些查詢的結果並非從 NS 的快取中取得的結果,所以其結果是可被相信的!(註:果要解釋成「經授權的回答」可能比較難以理解,所以寫了好長一段解釋 DNS 查詢的過程。
因此,什麼時候在利用 nslookup 查詢時會得到 未經授權的回答 (Non-authoritative answer) 這個提示呢?
  1. 當查詢的 DNS 伺服器在自己這壹台 NS 有快取紀錄時 
    註:因為 DNS 預設都會啟用快取機制,以增加 DNS 查詢的效能
  2. 當查詢的DNS 伺服器有設定  轉寄站 (Forwarder) 時 
    註:因為查詢並非 NS 自己透過反覆查詢出來的,其查詢的結果可能是錯誤的快取資料
除了以上兩個原因外,只要是啟用了遞迴查詢且沒有設定 轉寄站 (Forwarder) 時,本地端又沒有快取時,通常查到的資料就一定是 權威的答案 (authoritative answer),也不會出現 未經授權的回答 (Non-authoritative answer) 的訊息提示!
在 Microsoft DNS 裡有個【如果沒有可用的轉寄站,則使用根提示】的選項,如果有勾選的話,當 轉寄站 (Forwarder) 都無法連線時,就會改以 反覆查詢 (Iterative Query) 的方式從 根提示 ( Root Hint ) 開始查起,如果沒勾選的話,查不到就會直接放棄查詢。

§ 補充說明 §
如果你從壹台 DNS 查詢到的結果永遠都是「未經授權的回答」的話,那麼幾乎可以斷定這台 DNS 的背後還有一個「轉寄站」在幫忙查詢 DNS,估計 168.95.1.1 就是這樣的模式。
心得分享
DNS 的運作機制在網路的世界站著舉足輕重的地位,像是 Active Directory 就極度依賴 DNS 的運作,而我們在替客戶代管域名時,一些 DNS 伺服器設定的細節也經常需要這些基礎知識與觀念支持才能一次正確設定到位,否則就會開始出現一些在 IT 界俗稱的靈異現象。

我在這幾年公司招聘人才的過程中 DNS 運作流程是我每人必考的問題,不過鮮少有人能夠將 DNS 運作流程解釋透徹的,這點實屬可惜,希望透過這篇文章與 PoC 可以讓更多人能理解 DNS 運作的過程。

Windows NTP SERVER

○ Step1:開啟 FireWall Rule:開啟 DC 對要對外校時的 Server IP,Service Port 為 123,UDP。
○ Step2:關掉 Time Service
  命令提示字元(MS-DOS 模式):net stop w32time
○ Step3:設定 NTP Server
  命令提示字元(MS-DOS 模式):net time /setsntp: <servername> <----紅色部分換成公司 NTP server IP address  
  指令範例:
  1. net time /setsntp:clock.stdtime.gov.tw 
  2. net time /setsntp:123.111.0.111
  3. net time /setsntp:”clock.stdtime.gov.tw tick.stdtime.gov.tw 129.6.15.28”
○ Step4:檢查是否有設定成功
  命令提示字元(MS-DOS 模式):net time /querysntp
○ Step5:啟動 Time Service   
    命令提示字元(MS-DOS 模式):net start w32time <--- 這步驟也要做
○ Step6:重開後校時不會立刻生效,須等待一些時間後才會生效。    
設定Windows Server為NTP Server

1.設定成為NTP 伺服器類型

修改登錄檔中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters"
下面[Type]設定值修改為NTP。

2.設定授權時間伺服器

修改登錄檔中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config"
[AnnounceFlags]修改設定值為5

3.啟用NTP伺服器

修改登錄檔中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer"
[Enabled]數值修改為1

4.指定查詢外部NTP 伺服器

修改登錄檔中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters"
[NtpServer]數值修改為time.stdtime.gov.tw,0x1

5.設定查詢時間間隔

修改登錄檔中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient"
[SpecialPollInterval]修改數值為"十進位"900

*這邊使用的時間間隔單位為秒,設定900即為每900查詢一次步驟四所指定的時間伺服器。

6.設定時間修正設定
修改登錄檔中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config"
[MaxPosPhaseCorrection]修改為十進位1800
[MaxNegPhaseCorrection]修改為十進位1800

*這邊單位也是秒

7.重起Windows Time服務。

2016年12月1日 星期四

bach script

[Linux] Bash script 讀檔

摘要:[Linux] Bash script 讀檔
#! /bin/bash

filename=XXX

## 讀檔 word by word
for WORD in `cat $filename`
do
    echo $WORD
done


## 讀檔 line by line
while read LINE
do
    echo $LINE
done < $filename

2016年7月1日 星期五

HPUNIX LVM

LVM Commands


  strings /etc/lvmtab       - lists existing VG
  vgdisplay        - lists existing VG
  vgdisplay -v        - lists existing VG, LV, PV
  lvlnboot -v        - lists boot definitions
  vgdisplay -v /dev/vg00      - lists info about VG & LVs belonging here
  lvdisplay -v /dev/vg00/lvol1      - lists info about LV
  pvdisplay (-v) /dev/dsk/c0t5d0     - lists physical volume
  swapinfo -t        - lists swap
  vgcfgbackup vg01       - creates a backup copy of the LVM configuration
  vgexport -v -p -s -m /tmp/vg01.map vg01    - exports VG vg01 definitions
  vgimport -v -s -m /tmp/vg01.map vg01     - imports VG vg01 definitions
  vgchange -a r vg01       - changes VG to read-only




New VG Creation


mkdir /dev/vg01 - creates VG directory mknod /dev/vg01/group c 64 0x010000 - creates VG control file (always called "group") pvcreate [ -f ] /dev/rdsk/c_t_d0 - prepares the disks for LVM vgcreate /dev/vg01 /dev/dsk/c_t_d0 - creates the VG

LV, FS, Mirroring


lvcreate -L 100 -n lvname /dev/vg01 - creates a 100M LV in VG vg01 lvextend -m 1 /dev/vg01/lvname - creates a mirror of the LV newfs -F vxfs /dev/vg01/rlvname - creates a journaled FS in the LV mkdir /lvname_dir - creates a mount point for new FS mount -F vxfs /dev/vg01/lvname /lvname_dir - mounts a FS to the mount point dir mount -F vxfs -o ro /dev/vg01/lvname /lvname_dir - mounts a FS to the mount point dir - read-only primary VG - /dev/vg00 LVs of VG - /dev/vg00/* vgcreate /dev/vg01 (/dev/dsk/c...) - creates VG (on which PVs) vgextend /dev/vg01 /dev/dsk/c... - extends VG by other PV pvcreate -f /dev/rdsk/c7t6d0 - creates physical volume lvcreate -n lvol1 /dev/vg01 - creates LV lvol1 in VG vg01 lvcreate -i 2 -I 16 -l 20 -n lvol1 /dev/vg01 - creates a stripped LV with 80MB size (2 stripes => 20+20*2) lvcreate -m 1 -n lvol1 /dev/vg01 /dev/dskc7t6d0 /dev/dsk/c0t5d0 - creates a mirrored LV lvcreate -m 1 -L 200 -m 2 -L 300 -n lvol1 /dev/vg01 /dev/dsk... - creates a mirrored LV with specific mirror sizes lvextend -l 1 /dev/vg01/lvol1 - extends LV by 1 PE (ph. extent) lvextend -L 100 /dev/vg01/lvol1 - extends LV by 100 MB lvremove /dev/vg01/lvol1 - removes LV newfs /dev/vg01/rlvol1 - creates a new FS on LV lvol1 mkfs -F vxfs -o largefiles /dev/vg01/rlvol1 - creates a new FS with large files support extendfs -F vxfs /dev/vg01/lvol1 - extends a FS size to max of LV fsadm -F vxfs -b 50000 /mnt/myfs - modifies a size of FS to 50MB lvreduce -l 1 /dev/vg01/lvol1 - decreases LV lvol1 by 1 PE pvremove /dev/dsk/c... - removes a physical volume pvmove -n /dev/vg01/lvol1 /dev/dsk/c7t6d0 /dev/dsk/c0t5d0 - moves the PV to another vgreduce vg01 /dev/dsk/c7t6d0 - remove PV from VG vgcfgrestore -n /dev/vg00 /dev/rdsk/c0t7d0 - restores LVM configuration for the physical volume vgremove vg01 - removes VG


ioscan -funC disk|grep HSV450

rmsf -H 0/0/6/1/0.11.0.0.0.1

ioscan -m lun| grep HSV450

rmsf -H 64000/0xfa00/0x4

ioscan -funC disk |grep NO_HW

rmsf -H 64000/0xfa00/0x5f


ioscan -n  dsf 

strings /etc/lvmtab

2016年6月22日 星期三

ZFS 功能介紹

底下為原文內容:
ZFS(Zettabyte File System) 一個打破過去思維的檔案系統,是昇陽 Sun Microsystems 這家公司所開發出來的全新型態檔案系統,因為 License 的問題所以目前只有在 Solaris、Mac、BSD 上看得到,ZFS 是 128bit 的檔案系統而它到底有多強呢?別再等待了馬上用了你就知道,只能說 ZFS 真是一個上帝賜給IT人員的好禮物。

優點:

1. 簡易管理(Ease of Management):只需透過簡易的兩個指令 zpool 及 zfs 即可操作管理增加及縮減檔案系統容量。
2. 高延展性(Scalability):可以線上動態的增加容量給檔案系統而不需停機。
3. 資料完整性(Data Integrity):再也不需要 fsck 修復資料,任何在 ZFS 裡面進行的動作都會經過同位檢查(Everything is checksummed)確認後才寫入/讀出。
4. 驚人的高效能表現(Breathtaking Performance):資料寫入磁碟機時,首先會將資料先寫入第一個未使用的區塊(first free block),不需等待實體磁碟機轉速的延遲及磁頭移動的時間。同時具有智慧預備讀取功能(Intelligent Prefetch)可自動預測下筆讀取資料並將其預先放置在快取記憶體裡。
5. 擁有企業級的操作功能:具備 Quota(磁碟配額)、Reservation(磁碟預留)、Compression(磁碟壓縮)、Snapshot(磁碟快照)、Clone(磁碟復製)等強大的功能。
6. ZFS是免費使用檔案系統:Apple 的 Mac OS 將在下一版 10.6 Snow Leopard 即內建支援 ZFS,而 FreeBSD 7.X 環境下也已經開始支援 ZFS 也將於 8.0 之後的版本列入為主要檔案系統的一部份。

測試環境:

i386 P4-1.6
Real RAM 512M
OS FreeBSD 7.1R

1. 啟動 ZFS

# vi /etc/rc.conf #加入開機自動啟動
zfs_enable="YES"

# vi /boot/loader.conf # 針對 ZFS FreeBSD 核心的最佳化調整
vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"

# /etc/rc.d/zfs start # 手動啟動 ZFS
# reboot # 重新啟動讓調整的參數開機載入


2. ZFS 的 zpool 指令

# zpool create storage mirror ad2 ad3 # 建立 Raid1(1+1=1) Mirror 格式,資料會同時寫入兩棵 HD。
# df -h # 查看 storage pool 是有已經建立
Filesystem Size Used Avail Capacity Mounted on 
storage 5.8G 6.9M 5.8G 0% /storage

# zpool status # 查看本機 ZFS 的狀態,這個系統中有一個 pool 名稱為 storage 是由兩棵代號 ad2 及 ad3 的實體硬碟 mirror 而成
pool: storage
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
mirror ONLINE 0 0 0
ad2 ONLINE 0 0 0
ad3 ONLINE 0 0 0

errors: No known data errors

# zpool list # 查看 pool 的空間使用狀態
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
storage 5.94G 7.00M 5.93G 0% ONLINE -

# zpool offline storage ad2 # 讓 storage 這個 pool 的 ad2 硬碟暫時離線
Bringing device ad2 offline
# zpool status storage # 查看狀態會有 DEGRADED 警告
pool: storage
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
storage DEGRADED 0 0 0
mirror DEGRADED 0 0 0
ad2 OFFLINE 0 0 0
ad3 ONLINE 0 0 0

errors: No known data errors

# zpool online storage ad2 # 讓 storage 這個 pool 的 ad2 硬碟重新上線
Bringing device ad2 online
# zpool status storage # 查看狀態 DEGRADED 警告已解除
pool: storage
state: ONLINE
scrub: resilver completed with 0 errors on Thu Apr 9 13:49:50 2009
config:

NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
mirror ONLINE 0 0 0
ad2 ONLINE 0 0 0
ad3 ONLINE 0 0 0

errors: No known data errors

# zpool export -f storage # 卸除(umount) storage 這個 pool 參數 -f (Force) 為強制卸除
# df -h # 查看是否 umount,已無 storage 這個 pool
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 11G 1.4G 8.5G 14% /
devfs 1.0K 1.0K 0B 100% /dev

# zpool import storage # 掛載(mount) storage 這個 pool
# df -h # 查看是否 mount,已重新掛載 storage pool
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 11G 1.4G 8.5G 14% /
devfs 1.0K 1.0K 0B 100% /dev
storage 5.8G 6.9M 5.8G 0% /storage

# zpool scrub storage # 手動驗證 storage 這個 pool 中所有資料的完整性
# zpool replace storage ad4 ad5 # 在 storage pool 中用新的 ad4 ad5 取代原本的 ad2 ad3 兩棵 HD


3. ZFS 的 zfs 指令

# zfs create storage/compressed # 在 storage 這個 pool 中建立一個檔案目錄叫 compressed
# zfs list # 查看 ZFS 檔案狀態
NAME USED AVAIL REFER MOUNTPOINT
storage 7.02M 5.84G 6.91M /storage
storage/compressed 18K 5.84G 18K /storage/compressed

# zfs set compression=gzip storage/compressed # 將 compressed 目錄設定成 gzip 壓縮格式
# zfs set compression=off storage/compressed # 解除 compressed 目錄設的壓縮格式

# zfs mount # 查看所有 ZFS 掛載的磁區
storage /storage
storage/compressed /storage/compressed

# zfs get all storage/compressed # 查看 storage/compressed 檔案目錄屬性
NAME PROPERTY VALUE SOURCE
storage/compressed type filesystem -
storage/compressed creation Thu Apr 9 14:14 2009 -
storage/compressed used 18K -
storage/compressed available 5.84G -
storage/compressed referenced 18K -
storage/compressed compressratio 1.00x -
storage/compressed mounted yes -
storage/compressed quota none default
storage/compressed reservation none default
storage/compressed recordsize 128K default
storage/compressed mountpoint /storage/compressed default
storage/compressed sharenfs off default
storage/compressed checksum on default
storage/compressed compression gzip local
storage/compressed atime on default
storage/compressed devices on default
storage/compressed exec on default
storage/compressed setuid on default
storage/compressed readonly off default
storage/compressed jailed off default
storage/compressed snapdir hidden default
storage/compressed aclmode groupmask default
storage/compressed aclinherit secure default
storage/compressed canmount on default
storage/compressed shareiscsi off default
storage/compressed xattr off temporary
storage/compressed copies 1 default

# zfs set quota=3G storage/compressed # 可設定檔案空間大小為 3G 但 storage 這個 pool 總大小為 5.8G 如果 3G 滿了而 5.8 還未用完會 share 給 /storage/compressed 繼續使用
# df -h # 查看 storage/compressed 的 Avail 變成 3G
Filesystem Size Used Avail Capacity Mounted on
storage 5.8G 7.0M 5.8G 0% /storage
storage/compressed 3.0G 128K 3.0G 0% /storage/compressed

# zfs set reservation=3g storage/compressed # 設定保留了 3G 給 /storage/compressed
# df -h # 查看 storage 的 Size 變成 2.8G,這是因為保留了 3G 給 /storage/compressed,代表 /storage/compressed 真正擁有 3G 別的 filesystem 是不能跟它 share 的
Filesystem Size Used Avail Capacity Mounted on
storage 2.8G 7.0M 2.8G 0% /storage
storage/compressed 3.0G 128K 3.0G 0% /storage/compressed

# zfs create storage/data # 於 storage pool 中再建立一個 data 檔案目錄
# zfs set mountpoint=/data storage/data # 設定真實掛載點原本 Mounted on 會由 /storage/data 變成到 /data
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 11294270 1468766 8921964 14% /
devfs 1 1 0 100% /dev
storage 2982656 7040 2975616 0% /storage
storage/compressed 3145728 128 3145600 0% /storage/compressed
storage/compressed@2009-04-09 3145728 128 3145600 0% /storage/compressed/.zfs/snapshot/2009-04-09
storage/data 2975616 0 2975616 0% /data

# zfs set sharenfs=rw storage/data # 設定分享權限可讀及寫,通常用在 NFS 分享上

# touch /storage/compressed/1234 # 建一個檔案到 compressed 目錄下
# md5 /storage/compressed # 用 md5 去 hash snapshot 之前的目錄,會得到一個 hash 值
MD5 (/storage/compressed) = 7bffed2808dfba7915f89f8f42b09f83
# zfs snapshot storage/compressed@2009-04-09 # snapshot compressed 目錄,取個隨便名稱就用今天日期
# md5 /storage/compressed/.zfs/snapshot/2009-04-09 # 再次用 hash 去驗證 snapshot 前後所得到的檔案是否一樣
MD5 (/storage/compressed/.zfs/snapshot/2009-04-09) = 7bffed2808dfba7915f89f8f42b09f83

# zfs destroy storage/compressed # 可刪除 storage/compressed 檔案目錄

2016年6月7日 星期二

LVM 64bit

All filesystems have limits, and the Ext family is no exception. Using your standard 4KiB block size, the 32-bit Ext3 has a well-known limit of 16TB for a volume. With the advance of storage mediums and greater availability of increased capacity, Ext4 was developed to overcome this limitation. Ext4 will now support volumes up to 1 exbibyte (EiB).
This is a fantastic, improvement, but what happens when you actually go to format one of these volumes? If your system is running with some of the older fs tools (like Debian Squeeze), then you will probably encounter this scenario when trying to format a large volume (let's say we have a 19TB partition at /dev/vg0/lv_data for this example).
# mkfs -t ext4 /dev/vg0/lv_data mke2fs 1.42.7 (21-Jan-2013) mkfs.ext4: Size of device (0x131a47800 blocks) /dev/vg0/lv_data too big to be expressed in 32 bits using a block-size of 4096.
Although the Ext4 filesystem has been updated to support 64-bit volumes, the tools may not be. The solution here is to grab the latest version of the e2fsprogs utilities and build them yourself.
First, grab the utilities from sourceforge:
# cd /opt/
# wget -Oe2fsprogs-1.42.7.tar.gz 
http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.42.7/e2fsprogs-1.42.7.tar.gz?r=http%3A%2F%2Fe2fsprogs.sourceforge.net%2F&ts=1361548232&use_mirror=superb-dca3
Then, extract the files and setup for your build
# tar -xzvf e2fsprogs-1.42.7.tar.gz
# cd e2fsprogs-1.42.7
# mkdir build
# cd build
If you don't have dev tools (like a compiler and make), install them now # apt-get install build-essential
Now you are ready to build the tools:
# ../configure
# make
# make install
Before actually creating your filesystem, however, you are going to wan to edit your /etc/mke2fs.conf file and enable the 64-bit feature flag automatically for a big disk. It should look something like this:
[fs_types]
    ext4 = {
        features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
        auto_64-bit_support = 1 # <—- add this line
        inode_size = 256
    }
Finally, you are ready to create your volume! If you are having trouble with the standard tools, you can run this to manually specify your options: # mke2fs -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize -i 4194304 /dev/vg0/lv_data
Now, you should be able to mount your volume and use it!
# mount /dev/vg0/lv_data /mnt
# cd /mnt

2016年5月10日 星期二

你輸入的網路介面卡IP已經指派給另一個介面卡?

症狀:你輸入的網路介面卡IP已經指派給另一個介面卡?

解決方法:
網路卡變更 PCI 插槽、更換網路卡或是更換主機板後, Windows XP/2000/2003 會將原本的網路卡設定隱藏起來 (稱為舊卡), 
而另外產生一個網路卡設定 (稱為新卡). 當你要設定 IP 位址時, 問題就來了: 

您輸入的網路介面卡 IP 位址 xxx.xxx.xxx.xxx 已經指派給另一個介面卡 xxxx,xxxx 在 [ 網路和撥號連線 ] 中被隱藏起來, 
因為他在電腦中不是實體介面卡,或者他是舊版而未運作的介面卡,而且這兩個介面卡同時都在使用中,只有其中一個 
可以使用這個位址。這樣可能會造成不正確的系統設定。 

您想要在進階的對話方 IP 位址清單中輸入另一個 IP 位址給這個介面卡使用嗎? 
是 => 回到 IP 設定畫面, 輸入另一個 IP 位址 
否 => 儲存設定, 當作沒這回事 

雖然不是個大問題, 但是又沒法從裝置管理員找到隱藏的網卡, 該怎麼辦呢? 

1. 開始→執行→cmd (進入命令提示字元模式) 
2. 輸入: set devmgr_show_nonpresent_devices=1 
3. 輸入: start devmgmt.msc (啟動裝置管理員) 
4. 點選「檢視」→「顯示隱藏裝置」 
5. 展開“網路介面卡”,解除安裝隱藏的網路卡即可 


這邊我通常會把沒用的都移除掉,例如出現問號的裝置
以及看起來像是透明的網卡訊息,反正有需要插下去就會抓到了

2016年4月26日 星期二

Linux 文章

https://books.google.com.tw/books?id=vwGLFWIQ-Z8C&lpg=PA239&ots=aufeOHurV5&dq=crontab%20%E5%88%86%E8%99%9F&hl=zh-TW&pg=PA236#v=onepage&q=crontab%20%E5%88%86%E8%99%9F&f=false

2016年4月21日 星期四

yum 設定更新

# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

# The proxy server - proxy server:port number
#proxy=http://zsphil53.intacc.local.csob.cz:8080
proxy=http://ahttpproxy:8080
# The account details for yum connections

2016年4月1日 星期五

NTP 校正時間

Linux

執行 /usr/sbin/ntpdate watch.stdtime.gov.tw
卻出現錯誤訊息"the NTP socket is in use, exiting "

必須先執行 :
 # service ntpd stop
# chkconfig ntpd off
再去執行

ntpdate clock.stdtime.gov.tw

或者直接修改

  • date MMDDhhmmYYYY 第一種設定 system time 的方法
  • date YYYY.MM.DD-hh:mm:ss 第二種設定 system time 的方法
hwclock -w 寫入到硬體

2016年3月30日 星期三

suse 11 (轉發)


http://blog.sina.com.cn/s/blog_71d9aee401011nuj.html
1. zypper 使用
 sudo zypper ar http://download.opensuse.org/distribution/11.4/repo/oss/ opensuse
(如果设置了代理 export http_proxy=http://proxy:port,用sudo -E)

 sudo zypper lr 列出所有库
sudo zypper rr <库名> 删除指定库
 sudo zypper refresh 更新库
 sudo zypper install <package_name>
 sudo zypper search <package_name> 
 sudo zypper update 更新
 sudo zypper pacth 打补丁

2. ssh server 设置
安装ssh包
yast -> firewall 中添加ssh server服务

3. 查看已经安装的文件属于哪个包: rpm -qf  /usr/lib/libpthread.a
   查看已经安装的包有哪些文件: rpm -ql <packagename>
   查看rmp包有哪些文件: rpm -qlp <packagename.rpm>

4. suse linux 64bit 开发32位程序需要安装下面的包:
   libstdc++43-devel-32bit
   glibc-devel-32bit (包含 32bit libpthread.a)
   gcc43-32bit

 5. 对所有文件包含子目录下的文件做dos2unix
find . -type f | xargs dos2unix

6. route 查看缺省网关地址
route | grep default

7. nslookup -> server 查看DNS服务器

8. file libACE.so.6.1.1
libACE.so.6.1.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
查看动态库是32位还是64位
(静态库先 ar -x libACE.a解包出***.o文件,然后再用 file ***.o 看)

9. nm -D libACE.so.6.1.1  查看动态库中的函数
   ar -t libACE.a 查看静态库中的.o文件

10.
使用source命令或者.(点号)来激活子shell中的变量使其能在父shell中使用
$source ./test.sh 或
$. ./test.sh

11. 二进制文件比较
cmp -l file1 file2 

12. tcpdump 抓包
tcpdump -i eth0 port 8000 -w test.cap
tcpdump -i eth0 udp port 8000 -w test.cap 抓UDP目的端口8000
tcpdump -i eth0 udp portrange 8000-8100 -w test.cap 抓指定端口范围的包
tcpdump -i eth0 port 8000 直接显示
tcpdump -s0 -i eth0 port 8000 默认的话 tcpdump 只抓取每个包的部分数据。 参数 -s snaplen 就是控制抓取每个数据包的长度, -s0 表示抓取全部的数据包

tcpdump -s0 -i vlan2 udp -c 10000000 -w /dev/shm/all.cap 只抓10000000个UDP包

13. 查看硬件相关信息
lspci 查看PCI总线设备,USB控制器,以太网控制器等信息
cat /proc/cpuinfo 查看CPU信息

14.修改系统socket buffer大小
修改/etc/sysctl.conf
net.core.rmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_default = 16777216
net.core.wmem_max = 16777216

使修改生效
sysctl -p /etc/sysctl.conf

查看是否生效
cat /proc/sys/net/core/rmem_default
cat /proc/sys/net/core/wmem_default

15.
grep "packet loss" packets.log 在指定文件中查找指定字符串的行
grep -v "packet loss" packets.log 在指定文件中查找不包含指定字符串的行

16.
统计网卡的发包速率
sar -n DEV 1 10 每秒采集一次,采集10次的求平均

17.
linux下查看进程的线程信息
ps -Lf pid

查看进程的线程数
ps -Lf pid|wc

查看进程以及其线程的优先级
top -H -p <pid>

18. 查看Suse Linux版本
# cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 1

19. mount 光驱
mount /dev/cdrom /mnt/cdrom -o loop

20. 查看网卡固件和驱动版本
# ethtool -i eth0
driver: be2net
version: 4.1.450.7
firmware-version: 4.1.450.7
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: no

查看网卡速率
# ethtool eth0
Settings for eth0:
        Supported ports: [ ]
        Supported link modes:  
        Supports auto-negotiation: Yes
        Advertised link modes:  Not reported
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 4000Mb/s
        Duplex: Full
        Port: Other
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: g
        Link detected: yes

21. 查看CPU所有core的实际频率
# egrep -i Hz /proc/cpuinfo

22. 查看进程的内存使用情况
# pmap <pid>

23. 查看各个中断每秒钟的调用次数
sar -I XALL 1