Archive

‘教學雜記’ 分類過的Archive

Comparison of file systems

2013年5月13日 尚無評論

WIKI 上有一篇整理蠻詳盡的檔案系統比較,記錄一下怕忘記了:http://en.wikipedia.org/wiki/Comparison_of_file_systems

Linux 下的磁碟重組問題

2013年5月13日 尚無評論

相信很多朋友在 M$ Windows 下使用的經驗過程中,一定都有操作過 “磁碟重組” 這個程式,但在 Linux 檔案系統上似乎我們很少聽到需要進行磁碟重組與看到磁碟重組的程式,這是為什麼呢 ? 其實,在 Linux 檔案系統下並非 “不需要” 進行磁碟重組,而是發生的機率遠低於 FAT 檔案系統而已,若是我們需要知道檔案系統是否有不連續的狀態 ( non-contiguous ) 出現時,可以透過 fsck 指令工具來進行操作,例如:

ns1:~ # fsck -nvf /dev/sdb1
fsck from util-linux-ng 2.16
e2fsck 1.41.9 (22-Aug-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found. Create? no

Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/sdb1: ********** WARNING: Filesystem still has errors **********
48 inodes used (0.00%)
5 non-contiguous files (10.4%)
2 non-contiguous directories (4.2%)
# of inodes with ind/dind/tind blocks: 0/0/0
Extent depth histogram: 25/14
5965907 blocks used (2.44%)
0 bad blocks
1 large file

35 regular files
4 directories
0 character device files
0 block device files
0 fifos
0 links
0 symbolic links (0 fast symbolic links)
0 sockets
——–
39 files

這裡有一篇文章,針對 Linux 檔案系統為何不太需要進行磁碟重組,有十分簡單的說明,有興趣的朋友可以參考一下:Why doesn’t Linux need defragmenting ?

在 Linux 檔案系統中我們是採用索引式檔案系統 ( indexed allocation ) 的運作方式,簡單來說,當我們產生一個檔案之後,這個檔案會取得一個 i-node 位置,裡面會記載這個檔案的相關 metadata 的訊息與包含資料放在那幾個 data block 內,因此當我們存取這個檔案時,便可以快速的取得所有 data block 的位置。而在 FAT 檔案系統下的運作方式則是透過每一個儲存的 data block 間互相告知下一個 data block 的所在位置,這種模式稱之為鏈結串列,但也因為如此,當我們存取放置在兩個檔案系統下的檔案時,會發現 Linux 檔案系統的存取效能會優於 FAT 檔案系統格式,因為我們可以很快速地知道所有 data block 放在什麼地方而一次取得,但 FAT 檔案系統必須反覆的存取這些 data block 才可以串起一個資料內容,一來一反間變增加許多存取時間。

但如果我們真的需要在 Linux 檔案系統下進行重組呢 ? 其實,也是可以,底下有幾個工具有興趣的朋友可以試試看:

  • SHAKE:Shake is a defragmenter that runs in userspace, without the need of patching the kernel and while the system is used (for now, on GNU/Linux only).

    ns1:~ # wget http://download.savannah.nongnu.org/releases/shake/shake-0.999.tar.bz2
    ns1:~ # tar jxvf shake-0.999.tar.bz2
    編譯 shake 需要使用 cmake、libattr-devel、help2man,因此編譯前可以先透過 yum 或者是 zypper 於作業系統內先行安裝:
    ns1:~# cmake /root/shake-fs-0.999
    當你執行 cmake 時已經安裝了 libattr-devel 卻一時反應沒安裝的情況時,請修改 /root/shake-fs-0.999/CMakeLists.txt 檔案,將 78、86、87、88這四行註解後重新執行 cmake 就可以

    ns1:~ # cd shake-fs-0.999/
    ns1:~/shake-fs-0.999 # make ; make install

    在使用 shake 重組磁碟時,必須先將磁碟裝置掛載到目錄,並且記得掛載 user_xattr 參數

    ns1:~ # mount -o user_xattr /dev/sdb1 /data
    ns1:~ # mount | grep data
    /dev/sdb1 on /data type ext4 (rw,user_xattr)

    ns1:~ # /usr/local/bin/shake /data
    ns1:~# umount /data
    重組後,可以在執行一次 fsck 檢查一下不連續的狀態,重輸出結果便可以發現已經有所改善

    ns1:~ # fsck -nvf /dev/sdb1
    fsck from util-linux-ng 2.16
    e2fsck 1.41.9 (22-Aug-2009)
    Warning! /dev/sdb1 is mounted.
    Warning: skipping journal recovery because doing a read-only filesystem check.
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    /lost+found not found. Create? no

    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    Free blocks count wrong (238224093, counted=238224094).
    Fix? no
    /dev/sdb1: ********** WARNING: Filesystem still has errors **********
    48 inodes used (0.00%)
    1 non-contiguous file (2.1%)
    2 non-contiguous directories (4.2%)
    # of inodes with ind/dind/tind blocks: 0/0/0
    Extent depth histogram: 26/13
    5965907 blocks used (2.44%)
    0 bad blocks
    1 large file

    35 regular files
    4 directories
    0 character device files
    0 block device files
    0 fifos
    0 links
    0 symbolic links (0 fast symbolic links)
    0 sockets
    ——–
    39 files

  • defrag:這是另外一隻重組腳本程式,使用方式比較簡單先,直接透過 Shell 下執行該程式指定針對的裝置便可以進行檢查重組
    ns1:~ # wget http://ck.kolivas.org/apps/defrag/defrag-0.08/defrag
    –2013-05-13 10:05:28– http://ck.kolivas.org/apps/defrag/defrag-0.08/defrag
    Resolving ck.kolivas.org… 193.19.136.183
    Connecting to ck.kolivas.org|193.19.136.183|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 2773 (2.7K) [text/plain]
    Saving to: `defrag’

    100%[======================================>] 2,773 –.-K/s in 0.001s

    2013-05-13 10:05:29 (1.77 MB/s) – `defrag’ saved [2773/2773]

    ns1:~ # sh defrag /dev/sdb1
    Creating list of files…
    511 files will be reordered

    0 files left
    Succeeded

  • 在 Ubuntu 底下還有一個針對 EXT4 檔案系統的重組程式,e4defrag,有興趣的朋友也可以試試看,使用方式可以參考這篇文章:Defragment Ext4 File systems using e4defrag (Ubuntu)

awk 語法中使用環境變數

2012年12月20日 尚無評論

awk 是一個十分強大的工具,剛好有朋友在詢問在 awk 語法中如果我需要使用到環境變數內的值,該怎樣使用,例如:

var=100

在awk語法中若要使用 var 這個變數值,則需要透過下列語法操作:

awk -v new_var=$var ……………….

搜尋檔案內涵蓋的字串方式

2012年11月26日 1 則評論

早上有個學生在詢問怎樣在茫茫檔案中查詢是否有被插入某一個字串的方式,但找尋後又希望知道是在插入在那個檔案內,操作語法如下所示:

# find . -type f -exec grep “字串” ‘{}’ \; -print 2> /dev/null

這樣 find 搜尋後會拋給 grep 進行字串的比對,並且將找到的結果與檔案名稱都呈現出來

OpenNebula 3.7.80 XEN Cluster 配置紀錄 — Part II

2012年10月23日 尚無評論

在 OpenNebula 3.7.80 XEN Cluster 配置紀錄 — Part I 中,我們已順利將 ONE 環境給建構起來,但全部透過指令來進行操作對於大部分的新手而言可能會略顯痛苦,好在 OpenNebula有另外提供一個套件Sunstone來做為圖形化的管理介面,功能與指令操作管理完全相同,接著筆者將針對如何組態Sunstone的方式來進行介紹:

步驟一:於ONE-Master環境中安裝Sunstone套件

預設安裝 ONE 相關 RPM 套件時,套件內已經包含了 Sunstone 套件環境,只是預設並未啟用與安裝而已,安裝方式如下所示:

ONE-Master:~ # /usr/share/one/install_gems sunstone
Distribution “suse” detected.
About to install these dependencies:
* make
* gcc
* rubygem-rake
* gcc-c++
* sqlite3-devel

Press enter to continue…  [ 按下 ENTER 按鍵讓系統補齊運作 sunstone 所缺少的套件 ]

zypper install make gcc rubygem-rake gcc-c++ sqlite3-devel
Loading repository data…
Reading installed packages…
‘make’ is already installed.
No update candidate for ‘make-3.82-147.1.2.x86_64’. The highest available version is already installed.
Resolving package dependencies…

The following NEW packages are going to be installed:
gcc gcc-c++ gcc46 gcc46-c++ glibc-devel libstdc++46-devel linux-glibc-devel
rubygem-rake sqlite3-devel

9 new packages to install.
Overall download size: 13.6 MiB. After the operation, additional 59.1 MiB will
be used.
Continue? [y/n/?] (y): y [ 輸入 y 讓系統自動將缺少的套件補齊 ]
Retrieving package linux-glibc-devel-3.1_rc5-7.1.1.noarch (1/9), 778.0 KiB (3.1 MiB unpacked)
Retrieving: linux-glibc-devel-3.1_rc5-7.1.1.noarch.rpm [done (0 B/s)]
Retrieving package rubygem-rake-0.8.7-11.1.2.x86_64 (2/9), 359.0 KiB (1.5 MiB unpacked)
Retrieving: rubygem-rake-0.8.7-11.1.2.x86_64.rpm [done]
Retrieving package glibc-devel-2.14.1-14.27.1.x86_64 (3/9), 612.0 KiB (2.9 MiB unpacked)
Retrieving: glibc-devel-2.14.1-14.27.1.x86_64.rpm [done (7.5 KiB/s)]
Retrieving package sqlite3-devel-3.7.8-1.1.2.x86_64 (4/9), 92.0 KiB (339.0 KiB unpacked)
Retrieving: sqlite3-devel-3.7.8-1.1.2.x86_64.rpm [done (79.0 KiB/s)]
Retrieving package libstdc++46-devel-4.6.2_20111026-1.1.4.x86_64 (5/9), 2.4 MiB (21.3 MiB unpacked)
Retrieving: libstdc++46-devel-4.6.2_20111026-1.1.4.x86_64.rpm [done (1.3 MiB/s)]
Retrieving package gcc46-4.6.2_20111026-1.1.4.x86_64 (6/9), 5.5 MiB (18.5 MiB unpacked)
Retrieving: gcc46-4.6.2_20111026-1.1.4.x86_64.rpm [done (1.3 MiB/s)]
Retrieving package gcc46-c++-4.6.2_20111026-1.1.4.x86_64 (7/9), 3.9 MiB (11.5 MiB unpacked)
Retrieving: gcc46-c++-4.6.2_20111026-1.1.4.x86_64.rpm [done (1.3 MiB/s)]
Retrieving package gcc-4.6-15.1.3.x86_64 (8/9), 4.0 KiB (0 B unpacked)
Retrieving: gcc-4.6-15.1.3.x86_64.rpm [done]
Retrieving package gcc-c++-4.6-15.1.3.x86_64 (9/9), 4.0 KiB (0 B unpacked)
Retrieving: gcc-c++-4.6-15.1.3.x86_64.rpm [done]
Installing: linux-glibc-devel-3.1_rc5-7.1.1 [done]
Installing: rubygem-rake-0.8.7-11.1.2 [done]
Installing: glibc-devel-2.14.1-14.27.1 [done]
Installing: sqlite3-devel-3.7.8-1.1.2 [done]
Installing: libstdc++46-devel-4.6.2_20111026-1.1.4 [done]
Installing: gcc46-4.6.2_20111026-1.1.4 [done]
Installing: gcc46-c++-4.6.2_20111026-1.1.4 [done]
Installing: gcc-4.6-15.1.3 [done]
Installing: gcc-c++-4.6-15.1.3 [done]
About to install the gems for these components:
* sunstone
Press enter to continue…  [ 按下 ENTER 按鍵讓系統開始進行套件的配置與安裝 ]

gem install –no-ri –no-rdoc json sinatra thin sequel sqlite3
Fetching: json-1.7.5.gem (100%)
Building native extensions. This could take a while…
Successfully installed json-1.7.5
Fetching: rack-1.4.1.gem (100%)
Fetching: rack-protection-1.2.0.gem (100%)
Fetching: tilt-1.3.3.gem (100%)
Fetching: sinatra-1.3.3.gem (100%)
Successfully installed rack-1.4.1
Successfully installed rack-protection-1.2.0
Successfully installed tilt-1.3.3
Successfully installed sinatra-1.3.3
Fetching: eventmachine-1.0.0.gem (100%)
Building native extensions. This could take a while…
Fetching: daemons-1.1.9.gem (100%)
Fetching: thin-1.5.0.gem (100%)
Building native extensions. This could take a while…
Successfully installed eventmachine-1.0.0
Successfully installed daemons-1.1.9
Successfully installed thin-1.5.0
Fetching: sequel-3.40.0.gem (100%)
Successfully installed sequel-3.40.0
Fetching: sqlite3-1.3.6.gem (100%)
Building native extensions. This could take a while…
Successfully installed sqlite3-1.3.6
10 gems installed
ONE-Master:~ #

步驟二:接著安裝 noVNC 功能於Sunstone環境

noVNC是一個webSocket為基礎的VNC用戶端軟體,用來作為連結運作中的VM使用,預設安裝 Sunstone 環境時並不會自動安裝,因此我們需要額外進行配置,操作方式如下所示:

ONE-Master:~ # cd /usr/share/one/
ONE-Master:/usr/share/one # ./install_novnc.sh
Downloading noVNC latest version…
######################################################################## 100.0%
Extracting files to temporary folder…
Installing Sunstone client libraries in /usr/lib/one/sunstone/public…
Installing SelfService client libraries in /usr/lib/one/ruby/cloud/occi/ui/public…
Downloading Websockify VNC proxy files
######################################################################## 100.0%
######################################################################## 100.0%
Backing up and updating /etc/one/sunstone-server.conf with new VNC proxy path…
Backing up and updating /etc/one/occi-server.conf with new VNC proxy path…
Installation successful

步驟三:組態 Sunstone 監聽網路 IP 位置

Sunstone 安裝後並不需要太多的設定便可以直接進行運作,其伺服器的組態檔案位在 /etc/one/sunstone-server.conf,在啟用伺服器服務之前我們必須要調整監聽的 IP 位址與服務埠號,操作方式如下所示 ( 組態檔案中的 29 ~ 32 行 ):

29 # Server Configuration
30 #
31 :host: 127.0.0.1    [ 修改為 ONE-Master 所使用的 IP 位址 ]
32 :port: 9869

啟動與關閉 Sunstone 伺服器也是透過 oneadmin來進行操作,因此當我們修正好相關監聽IP位址資訊之後,便可以切換到 oneadmin 使用者帳號身分內,執行  sunstone-server start

oneadmin@ONE-Master:~> sunstone-server start
sunstone-server started

步驟四:透過網頁來存取 Sunstone 伺服器

由於剛才我們已經將 Sunstone 伺服器的監聽位址改為 192.168.1.27:9869  ,如下圖所示,當我們透過瀏覽器連線到這個位址時,便可以順利看到Sunstone伺服器的網頁畫面:

登入 Sunstone 伺服器可以直接使用 oneadmin 的帳號與密碼便可以順利進入介面來進行操作,預設 Sunstone 伺服器介面為英文,因此我們可以點選Dashboard –> Configuration 中進行語系的調整,將介面改為繁體中文版:

而 Sunstone 伺服器的詳細操作方式,讀者若有興趣可以參考 http://opennebula.org/documentation:rel3.8:sunstone 官方文件來進行使用,在Sunstone伺服器介面中美執行一個動作時,讀者可以仔細觀察右下方會出現操作狀態提示文字,我們可以從隨時彈出的文字框架中確認這個指令操作是否有異常。因此,若要快速進行 ONE 的使用,Sunstone 伺服器是一個不錯的選擇。

 

OpenNebula 3.7.80 XEN Cluster 配置紀錄 — Part I

2012年10月22日 尚無評論

OpenNEbula ( 簡稱 ONE ) 是一個開放原始碼套件,可以用來作為動態佈署虛擬機器在一群實體資源,目的是將一群實體叢集資源轉換成彈性的虛擬基礎設備,且可以透過動態調適工作量來進行使用。在這個紀錄中是針對如何於 OpenSUSE 12.1 中進行 XEN Cluster 的配置,並且搭配 OpenNebula 來進行這些基礎建設資源的管理操作方式。

操作環境說明

在這次的實驗架構中筆者將兩台擁有雙核心的主機作為資源的叢集,初步資訊如下表所示:

資源項目 ONE-Master1 ONE-Node01
系統版本 OpenSUSE 12.1 X86_64 OpenSUSE 12.1 X86_64
CPU Core數 2 2
IP資訊 192.168.1.27 192.168.1.25

安裝過程中,大約僅需要 1 GB 左右的磁碟空間來進行環境的配置,如下圖所示,安裝時可以於類型挑選選擇,Other –> Minimal Server Selection (Text Mode),來進行使用。

另外,記得挑選軟體套件項目於 Server Functions –> Xen Virtual Machine Host Server 挑選安裝,兩台配置都是採用相同選擇模式,如下圖所示。

步驟一:基礎環境配置

完成 OpenSUSE 12.1 X86_64 環境安裝之後,記得於開機時挑選 Xen 這個開機選項,這樣才能啟動於 Xen 運作模式中,如下圖所示。

當然,我們也可以直接修改 /boot/grub/menu.lst 組態檔案,將預設啟動的項目直接指定開機 Xen 運作模式中 ( 在這個範例操作中是將 default 改為 0 ),操作方式如下所示:

重新啟動後我們可以透過 uname -r 確認一下系統是否已經運作 Xen 的核心模式中,操作方式如下所示:

最後在基礎環境配置中,我們還需要將兩台主機的 /etc/hosts 檔案將主機名稱與 IP 位址資訊進行配置,這樣便可以完成相關設定基礎需求:

步驟二:SSH伺服器的免密碼登入驗證環境配置

接著,我們需要將 ONE-Master 與 ONE-Node01 中分別將 SSH 伺服器啟動與配置免密碼登入驗證的設定 ( 針對 root 使用者 ),操作步驟如下所示:

上面步驟分別要在ONE-Master 與 ONE-Node01 中進行操作,接著,我們需要將 ONE-Node01 所產生的公開金鑰傳遞到 ONE-Master 主機中,操作方式如下所示:

ONE-Node01:~ # scp .ssh/id_rsa.pub root@ONE-Master:/root
The authenticity of host ‘one-master (192.168.1.27)’ can’t be established.
ECDSA key fingerprint is 15:61:a0:27:62:c6:9f:0b:e2:ce:45:28:3a:21:3a:2e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘one-master,192.168.1.27’ (ECDSA) to the list of known hosts.
Password:
id_rsa.pub 100% 397 0.4KB/s 00:00

接著,我們必須在 ONE-Master 中將ONE-Master 與 ONE-Node01的公開金鑰內容放置到 .ssh/authorized_keys 檔案內,操作方式如下所示:

ONE-Master:~ # cat id_rsa.pub >> .ssh/authorized_keys
ONE-Master:~ # cat .ssh/id_rsa.pub >> .ssh/authorized_keys
ONE-Master:~ # chmod 600 .ssh/authorized_keys
ONE-Master:~ # scp .ssh/authorized_keys ONE-Node01:/root/.ssh/

The authenticity of host ‘one-node01 (192.168.1.25)’ can’t be established.
ECDSA key fingerprint is a6:03:dc:85:a9:63:c0:36:5e:c5:b8:9e:b4:27:62:d0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘one-node01,192.168.1.25’ (ECDSA) to the list of known hosts.
Password:
authorized_keys 100% 794 0.8KB/s 00:00

複製完畢後,兩台主機可以進行相關測試,確認系統管理員 root 已經不在需要密碼便可以於兩台主機間進行登入存取作業:

ONE-Master:~ # ssh ONE-Node01
Last login: Mon Oct 22 12:48:56 2012 from one-master
Have a lot of fun…
ONE-Node01:~ # ssh ONE-Master
Last login: Mon Oct 22 12:49:05 2012 from one-master
Have a lot of fun…

步驟三:於ONE-Master與ONE-Node01確認是否有安裝 XEN Hypervisor 工具

系統基礎配置完成前我們得確認一下是否安裝過程中有正確安裝 XEN Hypervisor 環境與工具,如下圖所示,可以於指令列中執行 yast 指令工具,在Virtualization群組中,選擇 Install Hypervisor and Tools項目。 ( 如果已經裝好 XEN Hypervisor 環境與工具時,在這個選單會出現四個項目 )

接著,我們必須要挑選安裝 Xen 的虛擬化環境:

由於某些套件會是在圖形環境底下才可以運作,因此安裝前系統會跟你警告是否持續安裝,請選鑿Yes繼續安裝:

安裝過程中可能會碰到套件衝突,如下所示,請選擇反安裝衝突的套件,便可以順利完成相關配置,安裝完畢後請直接 reboot 系統,並且將系統開在 XEN 的運作環境下。

步驟四:於 ONE-Master 主機上安裝 ONE 套件

完成基礎配置之後,接著,我們必須在 ONE-Master 主機上進行 ONE 套件的配置,我們可以前往 http://downloads.opennebula.org/ 網站進行下載最新的 ONE 套件,如下圖所示:

在這個範例中筆者是採用 3.7.80 這個版本來進行示範,由於安裝過程中我們會需要許多額外的函數庫支援,因此我們可以先在 ONE-Master 主機上將 Packman 套件庫添加到套件庫列表中再進行安裝作業,操作方式如下所示:

ONE-Master:~ # zypper ar -f -n “Packman Repository” http://packman.inode.at/suse/12.1/ “Packman Repository”
Adding repository ‘Packman Repository’ [done]
Repository ‘Packman Repository’ successfully added
Enabled: Yes
Autorefresh: Yes
GPG check: Yes
URI: http://packman.inode.at/suse/12.1/

接著,我們將剛才所下載到系統中的 ONE 套件檔案解開:

ONE-Master:~ # tar zxvf openSUSE-12.1-opennebula-3.7.80.tar.gz
opennebula-3.7.80/opennebula-3.7.80-1.x86_64.rpm
opennebula-3.7.80/opennebula-devel-3.7.80-1.x86_64.rpm
opennebula-3.7.80/opennebula-sunstone-3.7.80-1.x86_64.rpm
opennebula-3.7.80/opennebula-zones-3.7.80-1.x86_64.rpm
opennebula-3.7.80/src/
opennebula-3.7.80/src/opennebula-3.7.80-1.src.rpm

解開後的 ONE 套件包會包含安裝檔與Source RPM檔案,我們僅需要將編譯好的 RPM 安裝檔案進行安裝即可,操作方式如下所示:

ONE-Master:~ # cd opennebula-3.7.80/
ONE-Master:~/opennebula-3.7.80 # zypper in opennebula-*
Retrieving repository ‘Packman Repository’ metadata [done]
Building repository ‘Packman Repository’ cache [done]
Loading repository data…
Reading installed packages…
Resolving package dependencies…

The following NEW packages are going to be installed:
apache2 apache2-prefork apache2-utils libapr-util1 libapr1 libxmlrpc++7
libxmlrpc3 libxmlrpc_abyss3 libxmlrpc_client++7 libxmlrpc_client3
libxmlrpc_packetsocket7 libxmlrpc_server++7 libxmlrpc_server3
libxmlrpc_server_abyss++7 libxmlrpc_server_abyss3 libxmlrpc_util3 opennebula
opennebula-devel opennebula-sunstone opennebula-zones pwgen ruby ruby-devel
rubygem-nokogiri rubygem-rack-1_1 rubygem-sqlite3 rubygems sqlite3 xmlrpc-c
ypserv

The following recommended packages were automatically selected:
apache2-prefork ruby-devel ypserv

The following package is recommended, but will not be installed:
mariadb

30 new packages to install.
Overall download size: 9.4 MiB. After the operation, additional 39.4 MiB will
be used.
Continue? [y/n/?] (y): <== 回答 Y 之後便會開始進行安裝

步驟五:於ONE-Node01主機上安裝 ruby 與 相關需求套件環境

由於 ONE-Node01 會直接掛載 ONE-Master 主機上所安裝好的 ONE 環境直接使用,但有些套件與套件庫並非都安裝在 /var/lib/one 目錄內,因此我們需要額外補上這些需求套件,操作方式如下所示:

ONE-Node01:~ # zypper ar -f -n “Packman Repository” http://packman.inode.at/suse/12.1/ “Packman Repository”
Adding repository ‘Packman Repository’ [done]
Repository ‘Packman Repository’ successfully added
Enabled: Yes
Autorefresh: Yes
GPG check: Yes
URI: http://packman.inode.at/suse/12.1/

ONE-Node01:~ # zypper in libmariadbclient16 libmariadbclient_r16 libmysqlclient18 libxmlrpc++7 libxmlrpc3 libxmlrpc_abyss3 libxmlrpc_client++7 libxmlrpc_client3
libxmlrpc_packetsocket7 libxmlrpc_server++7 libxmlrpc_server3 libxmlrpc_server_abyss++7 libxmlrpc_server_abyss3 libxmlrpc_util3 mariadb
mariadb-client opennebula pwgen ruby ruby-devel rubygem-nokogiri rubygem-sqlite3 rubygems sqlite3 xmlrpc-c

步驟六:於 ONE-Master 主機上配置 ONE 環境

ONE 套件安裝時會建立一個新的群組帳號 cloud 與使用者帳號 oneadmin,使用者家目錄會被配置在 /var/lib/one,如下所示:

ONE-Master:~ # id oneadmin
uid=1001(oneadmin) gid=1000(cloud) groups=1000(cloud),33(video)
ONE-Master:~ # ls /var/lib/one/
.bash_history .emacs .local .vimrc bin remotes
.bashrc .fonts .profile .xim.template datastores
.config .inputrc .ssh .xinitrc.template public_html

在ONE運作過程中,/var/lib/one/datastores 是用來作為存放系統媒體與運作的VM空間使用,因此筆者會建議將這個目錄單獨放在 SAN 或是 RAID 上,在這個範例中筆者僅以畫分一個新的分割區來進行示範:

ONE-Master:~ # fdisk /dev/sdb  [ 首先,筆者先將新添加的 HDD /dev/sdb 切割一個獨立的分割區 /dev/sdb1 ]
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xacc5e768.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

ONE-Master:~ # partprobe
ONE-Master:~ # mkfs.ext4 /dev/sdb1   [ 接著將這個分割區格式化為 EXT4 檔案系統,若是實際運用建議讀者可以改用 XFS 檔案系統 ]
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

ONE-Master:~ # tail -1 /etc/fstab [ 將掛載的作業模式寫到 /etc/fstab 組態檔案內 ]
/dev/sdb1 /var/lib/one/datastores ext4 defaults 0 0

ONE-Master:~ # mount -a [ 執行掛載作業,並確認相關檔案目錄權限是否為 oneadmin.cloud ]
ONE-Master:~ # df -h | grep datastores
/dev/sdb1 20G 172M 19G 1% /var/lib/one/datastores

ONE-Master:~ # ls -ld /var/lib/one/datastores/
drwxr-xr-x 3 root root 4096 Oct 22 13:14 /var/lib/one/datastores/
ONE-Master:~ # chown -R oneadmin.cloud /var/lib/one/datastores/

接著,我們於ONE-Master主機切換使用者身分到 oneadmin,並且載他的家目錄內建立一個子目錄 .one,將用來存取 ONE 服務的帳號密碼填寫到 .one/one_auth 檔案內,操作方式如下:

ONE-Master:~ # su – oneadmin
oneadmin@ONE-Master:~> mkdir .one
oneadmin@ONE-Master:~> echo “oneadmin:novell” > .one/one_auth
oneadmin@ONE-Master:~> chmod 600 .one/one_auth

步驟七:於 ONE-Node01主機上配置 ONE 環境

ONE-Node01主機上的 ONE環境基本上可以直接透過 NFS 協定掛載來自於 ONE-Master 主機已經安裝好的相關資源,因此,我們必須先手動於 ONE-Node01 主機中建立 oneadmin 使用者帳號資訊,操作方式如下所示:

ONE-Node01:~ # groupadd -g 1000 cloud
ONE-Node01:~ # useradd -d /var/lib/one -g 1000 -u 1001 oneadmin

接著,我們在ONE-Master主機上配置NFS伺服器將/var/lib/one 與/var/lib/one/datastores目錄共享給ONE-Node01主機來進行使用:

ONE-Master:~ # chkconfig rpcbind on
insserv: Service syslog is missed in the runlevels 4 to use service xenstored
ONE-Master:~ # rcrpcbind start
redirecting to systemctl
ONE-Master:~ # cat /etc/exports
# See the exports(5) manpage for a description of the syntax of this file.
# This file contains a list of all directories that are to be exported to
# other computers via NFS (Network File System).
# This file used by rpc.nfsd and rpc.mountd. See their manpages for details
# on how make changes in this file effective.

/var/lib/one ONE-*(rw,no_root_squash,async,no_subtree_check)
/var/lib/one/datastores ONE-*(rw,no_root_squash,async,no_subtree_check)

ONE-Master:~ # exportfs -ra
ONE-Master:~ # chkconfig nfsserver on
insserv: Service syslog is missed in the runlevels 4 to use service xenstored
ONE-Master:~ # rcnfsserver start
redirecting to systemctl

組態完 ONE-Master主機的 NFS 伺服器之後,接著,我們切換到 ONE-Node01進行 NFS 用戶端的配置,操作方式如下所示:

ONE-Node01:~ # chkconfig rpcbind on
ONE-Node01:~ # rcrpcbind start
redirecting to systemctl
ONE-Node01:~ # tail -1 /etc/fstab
ONE-Master:/var/lib/one /var/lib/one nfs bg,soft,rw 0 0
ONE-Master:/var/lib/one/datastores /var/lib/one/datastores
 nfs bg,soft,rw 0 0
ONE-Node01:~ # mkdir /var/lib/one
ONE-Node01:~ # mount -a
ONE-Node01:~ # mount | tail -2

ONE-Master:/var/lib/one on /var/lib/one type nfs4 (rw,relatime,vers=4,rsize=524288,wsize=524288,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.25,minorversion=0,local_lock=none,addr=192.168.1.27)
ONE-Master:/var/lib/one/datastores/ on /var/lib/one/datastores type nfs4 (rw,relatime,vers=4,rsize=524288,wsize=524288,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.25,minorversion=0,local_lock=none,addr=192.168.1.27)

ONE-Node01:~ # chkconfig nfs on

ONE-Node01:~ # rcnfs start

步驟八:於 ONE-Master主機上調整 ONE 啟用支援 XEN 環境

完成基本組態步驟之後,接著我們必須調整 ONE 組態檔案 ( 預設,組態檔案是定義使用 KVM ),將 XEN 虛擬化環境作為主要的支援項目,編輯 /etc/one/oned.conf 檔案,將 135 ~ 138 行與217 ~ 222註解,開啟 146 ~ 149 行與234 ~ 239 行:

註解

IM_MAD = [
name = “im_kvm”,
executable = “one_im_ssh”,
arguments = “-r 0 -t 15 kvm” ]

VM_MAD = [
name = “vmm_kvm”,
executable = “one_vmm_exec”,
arguments = “-t 15 -r 0 kvm”,
default = “vmm_exec/vmm_exec_kvm.conf”,
type = “kvm” ]

開啟

IM_MAD = [
name = “im_xen”,
executable = “one_im_ssh”,
arguments = “xen” ]

VM_MAD = [
name = “vmm_xen”,
executable = “one_vmm_exec”,
arguments = “-t 15 -r 0 xen”,
default = “vmm_exec/vmm_exec_xen.conf”,
type = “xen” ]

步驟九:於 ONE-Master 與 ONE-Node01 主機上調整 oneadmin 使用者 sudo 權限配置

因為筆者將 ONE-Master 與 ONE-Node01 都作為 XEN Host使用,因此在 ONE 運作過程中會需要使用到一些基本的 xentop、xm等指令,因此我們必須先將執行權限透過 visudo 指令工具添加下列規格:

oneadmin ALL=(ALL) NOPASSWD: /usr/sbin/xm *
oneadmin ALL=(ALL) NOPASSWD: /usr/sbin/xentop *
oneadmin ALL=(ALL) NOPASSWD: /usr/sbin/ovs_vsctl *

除此之外,讀者也必須更替一下 ONE-Master與ONE-Node01主機上的 oneadmin 使用者帳號密碼:

ONE-Master:~ # passwd oneadmin
Changing password for oneadmin.
New Password:
Bad password: too simple
Reenter New Password:
Password changed.

ONE-Node01:~ # passwd oneadmin
Changing password for oneadmin.
New Password:
Bad password: too simple
Reenter New Password:
Password changed.

步驟十:於 ONE-Master 啟動 ONE 伺服器服務

完成前面的基礎配置之後,接著我們可以在ONE-Master這台主機中,以oneadmin使用者帳號執行 one start,將 ONE 伺服器啟動,操作方式如下所示:

ONE-Master:~ # su – oneadmin
oneadmin@ONE-Master:~> one start
oneadmin@ONE-Master:~> ls  one.db
one.db

第一次啟動ONE伺服器時,會在 oneadmin 使用者帳號家目錄內產生一個 one.db 資料檔案,這裡面便是所運行的 ONE 伺服器相關資訊 ( ONE 也支援改用 MYSQL 作為儲存這些資訊的資料庫,有興趣的朋友可以參考官方網站說明配置 )

步驟十一:將 ONE-Master 與 ONE-Node01 XEN 資源添加到 ONE 伺服器中

順利啟動 ONE 伺服器之後,接著我們可以將運行中的 XEN 伺服器資源添加到 ONE 伺服器內,操作方式如下所示: ( -i  Set the information driver for the host , -v  Set the virtualization driver for the host , -n Set the network driver for the host )

oneadmin@ONE-Master:~> onehost create ONE-Master -i im_xen -v vmm_xen -n dummy
ID: 0
oneadmin@ONE-Master:~> onehost create ONE-Node01 -i im_xen -v vmm_xen -n dummy
ID: 1

接著,我們可以將這些資源建立一個叢集群組,這樣便可以將整個資源進行統合使用,操作方式如下所示:

oneadmin@ONE-Master:~> onecluster create Cluster
ID: 100
oneadmin@ONE-Master:~> onecluster addhost Cluster ONE-Master
oneadmin@ONE-Master:~> onecluster addhost Cluster ONE-Node01

到這邊為止我們便已經順利完成 ONE 運作環境,相關細部操作或者是語法使用問題讀者可以參考後面的 Ref. 文件進行閱覽。

參考文件:

延伸閱讀:

LVM Snapshot 快照功能的操作範例

2012年9月11日 尚無評論

當初在撰寫 “一次擁有LINUX雙認證:LPIC Level I + Novell CLA自學手冊” 一書時,忘了將 LVM Snapshot 功能添加到範例中,因此將這個範例補充道勘誤表內,有興趣的讀者可以自行補充參考:

Novell CLP 認證規範異動 ~ 要考試的朋友得注意喔

2012年9月10日 2 則評論

最近上課時,有同學在跟我反映目前似乎考 Novell CLP 時必須取得 Novell CLA 才可以取得證書,上官網看了一下目前的相關規範,果真在 http://www.novell.com/training/certinfo/clp/ 頁面中,有個十分不起眼的 Note 上面說明了必須要取得 Novell CLA 之後,才會核發你通過的 Novell CLP 證書。

也因此,現在要準備考 Novell CLP 的朋友要特別注意,當你通過 Novell CLP 考試時,仍舊必須要前往 VUE 去測驗 Novell CLA (  USD55 ),才會收到通過的證書。但底下有幾個建議模式可以供大家參考:

  1. 準備 Comptia Linux + ,通過 Comptia Linux + 之後可以申請更換 LPIC Level I 的證書,而當取得 LPIC Level I 的證書之後又可以申請 Novell CLA 的證書,因此只要準備一次便可以取得三張 Linux 相關國際證書。Comptia Linux+需要通過考試科目:LX0-101 與 LX0-102 ( 官方網站 ),每科費用為 USD190。
  2. 準備 LPIC Level I,通過取得 LPIC Level I 的證書之後又可以申請 Novell CLA 的證書,而LPIC Level I需要通過考試科目:117-101與 117-102,每科費用為USD 155。
  3. 直接準備 Novell CLA 認證,費用為 USD 55 元,準備方式內容可以參考 Novell CLA 11 考試優惠與心得分享 這篇文章。

啥米系 RAID ~

2012年9月9日 尚無評論

JetStor 這間公司很用心,把常用的 RAID 儲存模式都做成動畫了,這樣學習 RAID 更方便 ~

有興趣的朋友可以前往參考 http://www.acnc.com/raid

Categories: 教學雜記 Tags:

openSUSE 12.2 Release …..

2012年9月6日 2 則評論

新版的 OpenSUSE 12.2 於 9/5 正式釋出了,不過目前台灣的 Mirror Site 到 9/6 上午尚未完備,所以我是從日本的 Mirror Site 取得 ISO 安裝檔案 ( 速度還不錯,大概 2 HR 可以將 32/64 Bit 檔案抓完 ),當然在正式安裝之前我們還是得先看一下這個版本的重大異動項目 ( Release Note ),在這個版本中個人認為有幾個比較重要的變化是使用者之後採用 OpenSUSE 12.2 時要特別注意的部分,包含有:

  • 採用 GRUB 2.0 final 版本作為預設的 GRUB 程式,也可以直接支援 UEFI,並且也可以支援 LVM 或 btrfs 分割區、與加密的分割區來作為開機磁碟。
  • sysvinit 已經停用,改用systemd來做為主要的啟動系統服務運作元件
  • 原先我們慣用的cryptoloop加密容器的方式,在這個版本中也被停用了 ( mount 與 losetup 也不支援舊的模式 ),並改用dm-crypt方式來進行處理。( 若是之前您有參照筆者著作 “Linux系統安全防護與建置” 一書第三章來進行加密檔案系統操作時,當時厚的方式筆者便以 dm-crypt 模式來進行介紹,所以不影響使用模式。)
  • 在虛擬化技術部分,這個版本已經預設支持支援 XEN 與 KVM 虛擬化技術,但在 KVM 相關虛擬化技術文件上官方也有提供相關技術手冊供使用者參照使用,後續我也會再補上一篇關於 KVM 的操作說明與範例示範使用模式。

當然,除了我列出來認為比較重要的更動項目之外,openSUSE 12.2有許多異動與更新的部分還需要大家好好的深入研究與接觸,勢必會發現一些不同的觀感。底下,提供一些操作範例影片:

  • openSUSE 12.2 安裝影片檔案
  • 待續 …