2010年6月13日 星期日

rsync 同步磁碟

最近在處理一些虛擬化的東西,突然發現備份不了磁碟(LVM),才在網路上找了好久的資料,
對於LVM很多人是直接利用LVM的snapshot技術來作備份,可是這樣對於遠端或是異地備份來說
似乎不大實際,而使用dd來說又會耗費太多頻寬跟CPU資源,自然就把腦筋動到了rsync的身上,
因為他在複製的時候只會處理更動的部份,是大檔案同步的不二人選,但是要直接同步磁碟是
不行的,rsync預設也沒有提供,就算你真的同步了,也只會看到遠端建立了一個link或是
block device的指向檔,並不符合我們真的要備份功能,需要自己下載rsync並且手動上patch編譯
過之後,才會多一個 cpoy-devices的參數,這時候使用rsync就會把block device的資料原原本本的
複製過去了

ex:
rsync --copy-devices /dev/disk/lvm hostip::dir/imgfile

2010年6月10日 星期四

KVM 與 QEMU 的差別

轉錄別人的文章
文章出處 http://benjr.tw/?q=node/534

KVM(Kernel-based Virtual Machine) + KQEMU

在 KVM(Kernel-based Virtual Machine) 裡面一直會談論到 QEMU 什麼是 QEMU 究竟在 KVM 的虛擬化中 QEMU 佔了什麼重要的地位.

  • QEMU
  • 我們來看看 QEMU 的官方網頁對於 QEMU 的定義是什麼. http://www.nongnu.org/qemu/about.html QEMU 屬於 Open source 也就是可以讓大家免費來使用的,而且它就有兩種功能 1. 是 machine emulator 2. 是 virtualizer 各代表什麼意思呢!

    • machine emulator (User mode emulation)
    • 當 QEMU 當成 machine emulator 時它可以讓其他平台的作業系統 OSes 或是程式 Programes 比如是 ARM (一種常用於可攜式裝置的處理器) 系統可以直接執行在不同的平台上,比如是我們的桌機.使用的技術叫做 dynamic translation( JIT : just-in-time compilation http://en.wikipedia.org/wiki/Just-in-time_compilation). 藉此可以得到較佳的較能.

    • virtualizer(System mode)
    • 當 QEMU 當成 virtulizer 時, QEMU 幾乎可以以模擬的方式模擬出一台 PC ,包含了 CPU 以及其他的周邊裝置,所以透過這種方式,QEMU 可以模擬出不同的硬體出來,如 x86, AMD64, ARM, Alpha, ETRAX CRIS, MIPS, MicroBlaze 和 SPARC.不過目前可以執行 QEMU 的 virtualizer 只有 x86 x86_64 和 Power PC 詳細資料請參考 QEMU 的官方網頁 http://www.nongnu.org/qemu/status.html 也因此市面上的作業系統都可以模擬出來如 Linux, Solaris, Microsoft Windows, DOS, 以及 BSD.但是這種模擬的方式像是在 Host 的作業系統上跑應用程式(application),所以效能不是很好,所以在 Linux kernel 下的是使用另外一種的方式去模擬 KQEMU.

    光是看完 QEMU 官方網站的說明可以會讓人更搞不懂到底 KVM 和 QEMU 是誰在做模擬的動作.

  • KVM & QEMU
  • 一開始我對於 KVM 和 QEMU 的概念有點分不太清楚,但這兩個東西其實是主要構成 Linux 虛擬化的最重要的兩個元件(components).我們可以先上 KVM 官方網站的 FAQ 查看一下. 裡面的其中有一點就清楚的說明了 KVM 和 QEMU 的關係
    http://www.linux-kvm.org/page/FAQ#What_is_the_difference_between_KVM_and...
    Q:What is the difference between KVM and QEMU?
    A:QEMU uses emulation; KVM uses processor extensions (HVM) for virtualization.
    原來 KVM 只負責虛擬化的部份 HVM (hardware-assisted virtualization),也就是 KVM 負責 VMM(Hypervisor) 的工作,至於模擬硬體裝置就交給了 QEMU.

    QEMU 的 FAQ
    http://qemu-buch.de/cgi-bin/moin.cgi/FrequentlyAskedQuestions
    Q:Can QEMU use hardware virtualization extensions - Intel's VT or AMD's SVM?
    A:At present, no. A separate project named Kernel Virtual Machine currently uses a
    modified QEMU to provide this ability for Intel's VT and AMD's SVM technologies.
    上面也是講述同樣的關係.KVM 主要的功能就只是一個 VMM (hypervisor) 他並沒有去模擬硬體的裝置.模擬硬體的動作全都是交給 QEMU,不過 QEMU 只是存在 user space 的程式它必須透過 /dev/kvm 來和 kernel 與硬體溝通.

  • KQEMU
  • 那 KQEMU 又是什麼?
    在 Linux KVM 上使用的的 QEMU 是修改過的版本叫做 KQEMU(也準備轉移到 FreeBSD 和 Windows 的系統上).主要是 QEMU 的公司 Fabrice Bellard 針對 x86 有虛擬化處理器的系統,修改一個只能使用在這種系統上的模擬器.這改寫過的 QEMU 被稱為 KQEMU 或是 QEMU Accelerator.最主要就是為了提升 x86 虛擬化處理器對於虛擬化效能的提升.

    所以我們在使用 KVM + KQEMU 時其處理器必須具有 Intel (VT) 或是 AMD (AMD-V) 功能才能使用.

  • Guest Mode
  • 系統會將工作模式分為 3 種,除了原本的 Kernel , User mode 之外還添加了 Guest Mode.這三種模式各處理不同的工作.

    • Guest Model:執行關於 Guest OS 的 Memory & CPU 的 I/O 請求.
    • User Model:透過 KQEMU 所模擬的裝置,User mode 接受 Guest OS 的 Storage 和 Network I/O 請求.
    • Kernel Model:就負責 Guest Model 所提出的 Storage 和 Network I/O 請求並做轉換.

note: kernel space 和 user psace 在作業系統中會將 virtual memeory(記憶體技術的一種) 區分成兩塊,分別為 kernel space 和 user psace.很明顯的是 kernel space 就是保留給 kernel, kernel extensions, 或是 device drivers.這保留的空間是不會再釋放出來的.相對應的 user space 就是給一般使用者的應用程式 (applications) 來使用.這邊的空間會依據需求會被釋放出來給其他的程式來使用.

2010年6月2日 星期三

dd option

資料來源: http://hon0612.blogspot.com/2007/09/linuxdd.html
在別人網誌看到的 dd 選項中文說明,備份一下

語法:dd [選項]

if =輸入文件(或設備名稱)。

of =輸出文件(或設備名稱)。

ibs = bytes 一次讀取bytes字節,即讀入緩衝區的字節數。

skip = blocks 跳過讀入緩衝區開頭的ibs*blocks塊。

obs = bytes 一次寫入bytes字節,即寫入緩衝區的字節數。

bs = bytes 同時設置讀/寫緩衝區的字節數(等於設置ibs和obs)。

cbs = byte 一次轉換bytes字節。

count=blocks 只拷貝輸入的blocks塊。

conv = ASCII 把EBCDIC碼轉換為ASCIl碼。

conv = ebcdic 把ASCIl碼轉換為EBCDIC碼。

conv = ibm 把ASCIl碼轉換為alternate EBCDIC碼。

conv = block 把變動位轉換成固定字符。

conv = ublock 把固定位轉換成變動位。

conv = ucase 把字母由小寫轉換為大寫。

conv = lcase 把字母由大寫轉換為小寫。

conv = notrunc 不截短輸出文件。

conv = swab 交換每一對輸入字節。

conv = noerror 出錯時不停止處理。

conv = sync 把每個輸入記錄的大小都調到ibs的大小(用NUL填充)。


2010年5月31日 星期一

LVM create

最近稍微小弄一下LVM,來筆記備忘一下

system: Gentoo Linux

首先在系統裡面要 emerge lvm2,將lvm建立會需要的相關程式建立起來,

當然最重要的是,kernel要有支援,如果是Fedora 或是 Ubuntu 應該會有幫你編好module,

這部份就不用擔心,之後要瞭解的是,LVM 他把磁碟切成三層來看,

分別是PV(實體捲軸)、VG(捲軸群組)、LV(邏輯捲軸),

為什麼分三個?這是因為 LVM 可以把很多個實體磁碟當成合成一個大磁碟來使用,

然後在裡面再去切分割區出來給系統掛載,

概念瞭解了之後,就是開始建構 LVM 磁碟了,

  1. 首先,你要有實體磁碟或是已經分割好得磁區(/dev/sda or /dev/sda1 ...etc)
  2. 之後將你要作成LVM的磁碟或磁區,利用 pvcreate 指定為 LVM 磁區,如: pvcreate /dev/sda /dev/sdb2 /dev/sdc1 (連續指定多個要作成LVM的磁區或磁碟)
  3. 有了PV之後,接下來就是將你剛剛做好的LVM磁碟連結在一起,也就是綁在一起作成群組,如:vgcreate LVM_NAME /dev/sda /dev/sdb2 /dev/sdc1 (LVN_NAME 是你所指定的VLM名稱,之後在掛載會用到,後面接的是要榜訂成同個群組的磁區)
  4. 有了VG之後,我們就可以開始來利用裡面的空間了,這時候就是利用 lvcreate的指令來建立LV,如 lvcreate -L 200G -ndisk LVM_NAME (-L 指令後面接的是建立的磁碟大小,-n 接的是這塊磁碟的名稱,之後掛載也會用到,LVM_NAME 就是你建立VG的時候給的名字)
  5. 到這邊的時候,我們就已經建立好磁碟,可以當作一般的磁碟來利用,建立檔案系統,還是要在裡面在切割磁區也是可以,磁碟的掛載點會放在 /dev/LVM_NAME/disk 就可以對他操作啦