freebsd snapshot and iso mount

在freebsd提供了一個很好用的備份功能就是可以快速的把目前這個分區的資料照下來,之後在慢慢備份,而原本的服務還可以運作,這真的非常的方便。

注意:檔案系統快照只能用在獨立的「檔案系統」

* 對檔案系統做快照

/dev/ad4s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad4s1e on /Backup (ufs, local, soft-updates)
/dev/ad4s1d on /Document (ufs, local, soft-updates)

# mksnap_ffs /Backup /Backup/test.snap

* 將快照掛載並觀看作檔案備份

# mdconfig -a -f /Backup/test.snap -u 0 (載入到/dev/md0的裝置)
# mount -r /dev/md0 /mnt (把載入到md0掛到/mnt下,因為快照不可修改,所以要用唯讀)

* 移除快照檔

# umount /mnt (先卸載裝置)
# mdconfig -d -u 0 (釋放md0裝置在memory中的佔用)
# rm -rf /Backup/test.snap

* 掛載iso檔

# mdconfig -a -f xxx.iso -u 0 (載入到/dev/md0的裝置)
# mount_cd9660 /dev/md0 /mnt

* 卸載iso檔

# umount /mnt
# mdconfig -d -u 0

可以使用mdconfig -l指令來看看目前是否有此md裝置存在。

freebsd mount 其它檔案系統

整理一下freebsd除了一般的掛載外還有其它的檔案系統掛載,包含linux的proc檔案系統還有devfs檔案系統。

* freebsd的proc檔案系統

預設這是不會掛載的因為有安全性的問題,但是因為跑X所以通常會掛起來,因為某些程式需要到proc裡面去看行程的狀態。

# mount ‐t procfs proc /proc

或加入到/etc/fstab裡面
proc /proc procfs rw 0 0


* linux的proc檔案系統

通當如果有裝linux_base的話這個就可能要開,也是一樣因為一些程式需要用到proc裡面的資訊,像是htop它需要看proc裡面的資訊所以要求這功能一定要啟動。

# mount ‐t linprocfs linproc /compat/linux/proc

或加入到/etc/fstab裡面
linproc /compat/linux/proc linprocfs rw 0 0


* freebsd的devfs檔案系統

管理目前系統上所有的device和生成device node,只有做實驗還有自己玩的時候(jail)會掛載,因為系統啟動的時候在rc.d裡面就會自動啟動掛載了。

# mount ‐t devfs devfs /dev

VIM進階設定

最近去coscup2009才發現原來有把vim用到神領域的人,真有超佩服他的,所以最近又在玩vim的一些功能,以下是我的一些心得分享。

* 編碼的設定

我的環境是zh_TW.UTF-8那如果別人給我一個big5編碼的檔不就不能開了,不過vim會做轉碼的動作,所以可以放心。

在.vimrc裡面加入
set fencs=utf-8,big5 "vim開檔自動判斷檔案編碼先從utf-8開始
set fenc=utf-8 "建立新檔的時候以什麼編碼建立
set enc=utf-8 "vim所使用的內部編碼

簡單來說三個例子

1、檔案編碼為utf-8

開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為utf-8,而它與我們vim的內部編碼相同都是utf-8,所以直接就可以正確顯示。

2、檔案編碼為big5

開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為big5,而它與我們vim的內部編碼不同,我們內部編碼是utf-8,所以vim會呼叫iconv把讀出來的big5轉換成utf-8編碼,就可以正確顯示,而如果我們修改完內容寫回檔案的時候,vim又會將utf-8自動轉換成big5寫回檔案。

3、開新檔案

由於設定fenc=utf-8所以檔案在建立的時候就會以utf-8來編碼,雖然不設定的話,預設vim會讀取目前locale所使用的語系來建立檔案,但是如果常常語系改來改去的話,常常建立的檔案自己都不知道是什麼編碼,所以加入這個設定。

* 視窗分割

vim可以把一個視窗分割成幾個視窗,可以縱切也可以橫切,通常我使用縱切的話分割成左右兩個畫面,這樣可以同時開兩個程式碼而且可以對照著看內容,非常的方便。

ctrl+w, v 切割垂直分割
ctrl+w, n 切割水平分割
ctrl+w, q 關閉分割
ctrl+w, - 縮小分割大小
ctrl+w, + 放大分割大小
ctrl+w, = 平均分割大小
ctrl+w, 方向鍵 移動聚焦視窗

* 在程式碼中加速移動(必學)

※注意:要在normal mode下
[{ or [( 找左邊界第一個出現的{ or (
]} or ]) 找右邊界第一個出現的} or )
f@ or f" 向右找第一個出現匹配的符號或字元
$ 移到行尾,等於END
^ 移到行首,等於HOME
H 移到畫面最上方
M 移到畫面中間
L 移到畫面最下方
c$ 修改到行尾
d% 移除到行尾
dw 移除一個單字
d^ 移除到行首
% 找最近的() or {}

範圍選取技

※以下看到的"|"是「或」的意思
v | c | d + i | a + { | [ | " | '

v: visual
c: change
d: delete
i: inner object
a: an object
{},[],"",'': region

va{ 選取最小範圍的{}部份
vi{ 選取最小範圍的{}部份(但不包含{})
di" 移除最小範圍的""部份(但不包含"")
ci( 修改最小範圍的()部份(但不包含())
va{= 選取最小範圍的{}部份並排列整齊

* vim plugins

vim官網有非常多的plugin可以用,如果興趣可以自己上去慢慢找

NERD_tree.vim 目錄列表插件
taglist.vim 函式列表插件(需安裝ctags)

要加入plugin先在家目錄下面建立.vim/plugin目錄
> mkdir -p ~/.vim/plugin
之後把下載的plugin解壓縮之後都放到plugin目錄下面就行了,之後看一下它所附上的說明檔, 看要怎麼來設定使用這個插件,之後在加入對映的快速鍵來啟動插件。

> vim .vimrc 加入
"ctags command set for bsd
let Tlist_Ctags_Cmd = "/usr/local/bin/exctags"
"functional mapping
nmap <F1> :NERDTreeToggle<CR>
nmap <F2> :TlistToggle<CR>

我把F1, F2對映到這些plugin的啟動上面

* 總結

vim是個非常強大的編輯器,其實用起來像在打電動,所有很多的連續技,如果熟練的話,那麼寫程式或是編寫文件會大大的縮短時間,使工作更有效率。

* 附上投影片
Vim Hacks
View more documents from c9s.
freebsd的apci實在做的真是半調子,不過也不能這樣講,因為現在的硬體都客制化不依照規格走,所以也是難免,但最近因為 acpi的問題讓網卡都不能運作,除非把acpi的支援關掉,但是每次開機都要關這樣很麻煩,透過下面的設定就可以開機就關閉。

# vim /boot/loader.conf
加入 hint.acpi.0.disabled="1"

重新開機後
你會看到原先的開機選單中....
1. Boot FreeBSD [default]
2. Boot FreeBSD with ACPI disable
3. Boot FreeBSD in Safe Mode
4. Boot FreeBSD in single user mode
5. Boot FreeBSD with verbose logging
6. Escape to loader prompt
7. Boot FreeBSD with USB keyboard
8. Reboot

Select option, [Enter] for default
or [Space] to pause timer 10

變成了
1. Boot FreeBSD [default]
2. Boot FreeBSD with ACPI enable
3. Boot FreeBSD in Safe Mode
4. Boot FreeBSD in single user mode
5. Boot FreeBSD with verbose logging
6. Escape to loader prompt
7. Boot FreeBSD with USB keyboard
8. Reboot

Select option, [Enter] for default
or [Space] to pause timer 10

看到變成enable表示,選擇第二項目反而變成啟動載入acpi的支援
雖然在X下面活了這麼久,但是其實都不知道它的原理,今天找到了一篇文章對於整個概念寫的非常好,在此轉載一下。

* Fontconfig在桌面系統中的作用

KDE是類Unix系統中建立在X基礎上的一個主流桌面環境,對用戶來說,它提供了良好的圖形界面和語言切換機制,用以滿足來自不同國家、使用不同語言的用戶的使用需求,這種機制簡稱「國際化」。主要包括界面文字的翻譯,多種語言字體的管理、顯示的支持以及輸入法等等。這其中系統層面字體的管理和顯示的支持直接關係到文字的顯示效果,因此顯得尤為重要。在KDE系統中,字體管理、顯示的支持採用的是如下框架。

※架構: Fontconfig(字體配置)-->Freetype(字庫操作)-->xft(字體顯示)

Fontconfig:管理系統安裝的字體,根據應用程序的字體配置,match(匹配)一種字體,填充match字體的各種屬性。
Freetype:以Fontconfig匹配到的字體為參數,根據應用程序需要讀取相應的字庫。
xft:對需要顯示的語言文字進行顯示。

* X系統中字體的管理

作為KDE底層支持的X,它使用字體服務器(xfs)對安裝的字體進行管理,也稱之為「核心字庫管理系統」,基本配置原理是xfs使用可維護的字體安裝目錄和fonts.dir文件對字體進行操作。

X為之提供了一些工具來完成管理操作。例如:
mkfontdir,mkfontscale 用來生成安裝字體的 fonts.dir和fonts.scale。
xlsfonts 用來顯示安裝的字體。
xfd 用來顯示指定字庫的信息。
xset 用來管理字體服務器。

對於FreeBSD,在安裝了xorg 7.2並且X server運行的情況下,字體安裝目錄可用 xset q來查詢
shell>xset q
Font Path:
/usr/local/lib/X11/fonts/misc/,/usr/local/lib/X11/fonts/TTF/
/usr/local/lib/X11/fonts/OTF,/usr/local/lib/X11/fonts/Type1/
/usr/local/lib/X11/fonts/100dpi/,/usr/local/lib/X11/fonts/75dpi/
/home/dbhrscom/.fonts

上面顯示的是X系統安裝時定義的字體目錄。在這些目錄中,都有利用mkfontdir生成的fonts.dir(對於true type 字體需要使用mkfontscale 生成 fonts.scale,然後拷貝到fonts.dir中)。fonts.dir是個文本文件,裡面保存的是所在目錄的字體信息。關於這些信息的具體含義,可以參見X的man手冊,這裡不再贅述。

如果準備把一個字體安裝到X系統中,並且使用Xfs進行管理,大致需要以下過程:
1、建立一個目錄,並且把字庫文件拷貝到這個目錄下
2、運行mkfontdir或者mkfontscale,生成安裝字庫的fonts.dir文件
3、運行「mkfontdir -e 系統編碼目錄」生成encodings.dir文件
4、運行「xset +fp 字體目錄」或者「xset fp+ 字體目錄」,把字體目錄添加到xfs的字體目錄列表中。需要注意的是當字體目錄沒有fonts.dir這個文件時,這種添加字體目錄操作會失敗
5、運行「xset rehash」進行更新,確保新添加的字體可用

※注意:作為一種X系統的約定,安裝字體最方便的做法是把字體文件拷貝到「$HOME/.fonts/」目錄下,這樣省去了添加字體目錄的操作,而且xset +fp 是針對當前會話有效,如果準備系統啟動時有效,還要修改相關的配置文件。

* Fontconfig的字體管理

簡單的說Fontconfig是使用字體緩存的機制來進行字體管理的。這個Xfs有所不同。fontconfig提供fc-cache來建立這個緩存。

shell >fc-cache -v

/usr/local/lib/X11/fonts: skipping, 0 fonts, 12 dirs
/usr/local/lib/X11/fonts/100dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/75dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/Fonts: skipping, 4 fonts, 0 dirs
/usr/local/lib/X11/fonts/OTF: skipping, 23 fonts, 0 dirs
/usr/local/lib/X11/fonts/TTF: skipping, 13 fonts, 0 dirs
/usr/local/lib/X11/fonts/Type1: skipping, 29 fonts, 0 dirs
/usr/local/lib/X11/fonts/bitstream-vera: skipping, 10 fonts, 0 dirs
/usr/local/lib/X11/fonts/cyrillic: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/encodings: skipping, 0 fonts, 1 dirs
/usr/local/lib/X11/fonts/encodings/large: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/local: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/misc: skipping, 55 fonts, 0 dirs
/usr/local/lib/X11/fonts/util: skipping, 0 fonts, 0 dirs
/home/dbhrscom/.fonts: skipping, 0 fonts, 0 dirs
/var/db/fontconfig: not cleaning unwritable cache directory
/home/dbhrscom/.fontconfig: cleaning cache directory
fc-cache: succeeded

fc- cache的運行原理是掃瞄fontconfig的配置文件中定義的字體目錄,然後利用掃瞄的結果生成系統字體緩存。在這個fc-cache -v的運行結果中可以看到,它所掃瞄的路徑已經涵蓋了xfs所管理的系統字體路徑。但這並不表示fontconfig和xfs的繼承關係,fontconfig掃瞄這些目錄,完全是因為在配置文件fonts.conf中有這樣的定義!

<!-- Font directory list -->

<dir>/usr/local/lib/X11/fonts</dir>
<dir>~/.fonts</dir>

<!-- Font cache directory list -->

<cachedir>/var/db/fontconfig</cachedir>
<cachedir>~/.fontconfig</cachedir>

fc-cache所作的掃瞄都是基於以上的<dir></dir>定義。
這個配置文件在fontconfig最新版本中,默認放在下面的目錄中
/usr/local/etc/fonts/
而生成的字體緩存按照系統和當前用戶,分別存放到
/var/db/fontconfig
~/.fontconfig

這兩個目錄中,諸如下面所看到的

0c3f6abf7a2705d2e8570f7f70e9302d-x86.cache-2
1e99991e6eeb0b3e05d4185c886f4b19-x86.cache-2
2550ddc31d0b62d94bc27b0fea358aba-x86.cache-2
55cbb48b13195d29d336fd465f155e7b-x86.cache-2
75ff5e8ddb5aa19e5f229f72d89c73db-x86.cache-2

.cache-2 就是fc-cache的運行記號,fontconfig通過這個緩存來管理系統安裝的字體,也因為這種機制在系統中安裝字體變得非常簡單,只要把字體文件放到fonts.conf定義的目錄中,然後運行一下fc-cache。

由此看出,fontconfig和xfs相比,fontconfig提供了更加靈活的字體管理機制,目前系統中保持xfs和fontconfig並行工作的理由,只能是為必須使用xfs機制的程序提供一種支援。而作為KDE,它使用的就是fontconfig進行字體管理。舉例來說,KDE的控制中心有個「字體安裝」模塊,通過分析可知它進行字體安裝的原理就是自定義一個安裝路徑,放到fontconfig的配置文件中,然後把字體拷貝到自定義的目錄。

更完整的介紹請直參考 http://www.bsdlover.cn/html/16/n-116.html