個人心情和 Linux / FreeBSD 等技術

2007/05/23

淚光閃閃

看完電影再重聽一次這首歌,又讓我掉眼淚了...
據說歌曲由來就是紀念去世的哥哥

2007/05/20

cdrecord & mkisofs

語法
cdrecord [general options] dev=device [track option] track1...trackn

dev
的語法是 dev= scsibus,target,lun 或是 dev= target,lun.

scsibustargetlun 都是整數數字。這些數字代表裝置

的位置,如果你有 SCSI介面的裝置,WindowsXP的裝置

管理員中也會看到類似的代號。


cdrecord
是完全基於 SCSIbus 的命令,所以基本能夠對應所

有的SCSI燒錄機,而因 ide-scsi 驅動程式的關係,在linux

使用IDE或其他規格的控制介面燒錄器,已經不是問題了,因

ide-scsi 核心模組能將IDE燒錄器模擬成 SCSI燒錄器。

scsibus 0
則是預設的 SCSI bus ,可在開機訊息和 log中多留

意你機器上的 SCSI設定。



假如不知道或忘了 dev 的設定值,可以試試 -scanbus 的參

數來掃瞄代號。

# cdrecord -scanbus 只需要作一次把掃得的代號記住,ex: 0,1,0

常用的 General Options

-version
顯示 cdrecord 版本訊息


-v
顯示詳細訊息,用於燒錄時


-dao Disc At Once 模式寫入模式的一種。燒寫光碟時,

Lead-in開始寫起,一次從頭到尾把資料寫完,並且自動

close Disc。用此模式寫入,軌與軌之間將不會有Link Block

(Gap) 產生,所以若以此法複製碟片,子片總長度會和原來的

來源光碟片相同。(建議使用)


-saoDisc at Once相似,兩者最主要的差別是 Disc at Once

在寫之後,此光碟片便無法再寫入資料,但Session at Once

可以利用 Multi-Session 方式再將資料寫入光碟片內。


-tao 寫入模式的一種。燒寫光碟時,一次只寫入一軌,所以寫

入時可以在軌與軌之間中斷。這種寫入模式是用在漸增式寫入

Incremental Recording)的方式上。


Speed=# 這個值也是整數,寫入 CD 的話 speed=1 的速度大約

150 KB/s 1385 kB/s for DVD 。沒有指定寫入速度的話 ,會

/etc/cdrecord.conf 的設定檔中 CDR_SPEED=__ 的值當作預設

寫入速度,如果沒指定這個值的話,則會以所支援的最大速度寫入

如果指定 speed=0 的話,裝置則會以最慢速度寫入(最慢不見得就好

...有時會適得其反造成寫入品質低落,而且也會造成過度耗電和發熱...

,建議速度是燒錄機最大速度砍一半, ex : 16倍就以8倍燒


-multi 多區段寫入,可用於 sao

-format 用在 DVD+RW 等可複寫式的要重新寫入資料前,把RW片清空用。

blank=type format 是用於 CD-RW( all fast )

-data 這種格式簡單來說就是燒錄一般資料使用,會以 Mode 1

寫入。Mode1 Data CD ,光碟的容量計算是以MB為單位,含

所謂的錯誤修正碼 ( ECC ) 於光碟片的每個磁區,其大小為2048

Bytes,可以藉此來修正讀取資料時的錯誤,以保資料的正確性,

通常此種資料結構適用於不允取有絲毫錯誤的資料上。


-mode2 mode2Audio CD & Video CD,光碟的容量計算是以

分鐘為單位,備份像RMVBAVI這種影像檔雖說是影像檔,但仍

然算是mode 1格式... 由於mode 2記錄方式並沒有放入糾錯碼

(因此mode 2寫入往往可以寫入較多資料) 因此,為防mode 2寫入

造成錯誤,造成了mode 2 理論上寫入速度越慢越好。


另外需要用到 mkisofs 這個小程式

語法

mkisofs [ options ] [ -o filename ] path

-o 是指輸出成什麼名字,例如 image image.iso

path 是指哪個目錄下的檔案要燒錄

-r 設定在所有光碟中的檔案為公眾可讀和開啟 Rock Ridg

這種格式能unix檔案系統的特有資訊 (長檔名、擁有者、

權限位元)保存在光碟上且同時保持 ISO 9660 格式的相容性。

-J joliet格式,windows系統需要。


所以看起來會長成這樣子


# mkisofs -rJ -o image.iso path/


ps.
單一檔案如果超過2GB以上的話要改用 -udf 的選項,

udf 格式詳見wiki



最後燒錄

# cdrecord -v -dao speed=8 dev=0,0,0 -data image.iso


參考資料

cdrecord manpage

mkisofs manpage

中文版HowTo

PTT CD-R版

2007/05/10

rsync 保持檔案同步

把指令寫入crontable跑即可~

# rsync -ae ssh your.machine.tw:/usr/local/apache/htdocs > \
/usr/local/apache/htdocs/

不過這樣使用要注意 ssh key 已經安裝到各個機器上了

Dance With Me Tonight

這首歌聽說是K歌情人的導演12歲的兒子寫出來的

2007/05/06

CD-DVD Speed 測出的 Jitter 值如何解釋?

Jitter 的概念,就是指每一個 Pit,Land 的規定長度與實際長度
的差,單位為ns(十億分之一秒)。紅皮書規定了 CD 的 3T-Jitter
值應當小於 35ns 。

在 DVD 的場合,由於加入了資料對於 PLL 時鐘電路信號的偏差,
其 Jitter值的標準並不是以 ns 這個單位來表示,而是以%來表示。
一張質量好的DVD 光碟, Jitter 的範圍應當控制在8%以 下。
但是理論上 Jitter 值越小越好。

就針對刻錄盤而言,Jitter的大小除了受到 Pit 和 Land 長度偏差
的影響之外,還與刻錄深度對於讀取電平的 平衡度(Beta)、Pit
和 Land 之間的跳轉信號清晰度有關係。

請注意,用此功能所測得的 Jitter 曲線是相對值,它可以讓用戶
看到一張光碟上的 Jitter 值的變化趨勢。表徵一張碟片品質的穩
定程度。使用此功能對一張光碟進行測試時,必須結合該光碟的
C1/C2 或者 PI/PO 綜合判斷。

單純使用此功能對 2 張不同的碟片進行 Jitter 測試,來比較其
結果數值的大小是沒有任何實際意義的,也完全不能說明這
2 張光碟的刻錄品質(也包括音質在內)誰好誰壞!

資料來源
PTT bbs CD-R版精華區

2007/05/05

squid 效能等注意事項!

關於 filesystem
  • Linux
    • Reiserfs
      • reiserfs3 works just fine, it's recommended that

      • you mount with noatime and notail options, and

      • for theperformance freaks put the journal on a

      • different spindle

    • ext3
      • another fine blend, the defaults filesystem
      • creation parameters are just good for squid
      • - watch out for the number of inodes - squid
      • cached objects are usually about 12-16 kb in
      • size, make sure you have enough.

    • ext2
      • well, ext2 is a venerable good filesystem. But
      • do youreally want to wait for hours while your
      • FS is being checked?

  • Solaris
    • UFS
      • UFS is the old Solaris File System, which good and stable.
      • Use "noatime" as mount option.

    • ZFS
      • Use ZFS, if you want really high performance for your
      • Squid Cache. ZFS is included in Solaris beginning with
      • Solaris 10.Release 6/06. Use "noatime" as mount option.
關於RAID
squid 對於 RAID 的擊中率特別的差勁 = =,尤其是 RAID
4 / 5簡單了說就是不建議使用 RAID

關於SMP
Squid is a single process application and can not make use of SMP

If you want to make Squid benefit from a SMP system you
will needto runmultiple instances of Squid and find a way to
distribute yourusers on thedifferent Squid instances just as
if you had multiple Squid boxes.

Having two CPUs is indeed nice for running other CPU
intensive tasks onthe same server as the proxy, such as if
you have a lot of logs and need torun various statistics
collections during peak hours.

The authentication and group helpers barely use any CPU
and does notbenefit from dual-CPU configuration

*大意是...squid這隻程式無法在多 cpu 的系統獲得更多好處
,但是多個cpu的確能夠讓 unix 系統在額外執行程式時更流暢...*

關於OS安裝

Running Squid on separate drives to that which your OS is
running is often a very good idea

*將OS和squid快取分開安裝在不同的disk上是不錯的*

Generally seek time is what you want to optimize for Squid,
or moreprecisely the total amount of seeks/s your system
can sustain.This is why it is better to have your cache_dir
spread over multiple smallerdisks than one huge drive
(especially with SCSI).

*把 cache_dir 分派在多個而容量較小的disk效能會勝過單一
容量大的硬碟*
ex: 單一2GB*5個會比單一10GB的要好

If your system is very I/O bound, you will want to have
both yourOS and log directories running on separate drives.

*系統I/O頻繁時最好把系統和 log 與 disk cache分開,另外
最好是一個partition 就只放一個 cache_dir *

如何找出在 cache 中最大的物件
# sort -r -n +4 -5 access.log | awk '{print $5, $7}' | head -25

如何把cache清除乾淨?

# squid -k shutdown
# echo . . > /cache1/swap.state (每個cache都要)

Squid.conf中cache_mem代表的是?

cache_mem不代表 squid 所使用記憶體的最大值,它只能表示
需要用多少記憶體留住 " hot " (點擊率高)的檔案。

Squid需要多少記憶體?
1GB的cache_dir大約佔用10MB的 ram ,但是在64位元的 server
上會更多

*簡言之,記憶體插曹插滿就對了 = =*

沒有多餘記憶體的話,要如何降低記憶體使用

1.使用不同的malloc library ,例如GNU malloc 或是 dlmalloc

2.降低 squid.conf 設定檔中 cache_mem 的量 (Reducing this
parameterwill not significantly affect performance, but you may
recieve somewarnings in cache.log if your cache is busy)

3. Turn the memory_pools off in the config file. This causes
Squid togive up unused memory by calling free() instead of
holding on to thechunk for potential, future use. Generally
speaking, this is a bad ideaas it will induce heap fragmentation.
Use memory_pools_limit instead.

4. 降低設定檔中的 cache_swap . This will reduce the number
of objectsSquid keeps. Your overall hit ratio may go down a little,
but your cache will perform significantly better.

*某些malloc不支援超過2GB的記憶體,包括dlmalloc,當記憶體
大於2GB時則只能使用到2GB*

參考資料
squid的wiki

The FreeBSD Booting Process

FreeBSD開關機流程

1. Boot Manager :
在MBR或boot manager裡的程式碼通常是指開機流程的 stage 0(第0階段),
底下會討論兩種boot manager: boot0 和 LILO

The boot0 Boot Manager :這個 manager 可在剛安裝 FreeBSD
或以 boot0cfg工具安裝安裝後預設位置在 /boot/boot0 。
(boot0程式非常的簡單輕巧,由於 slice table 和 0x55AA 識別符放置
在MBR結尾處的關係,boot0 只有446bytes大小)。如果你有多個系統,
開機時你將會看到如下列的圖示

Example 12-1. boot0 Screenshot
F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1
Default: F2

其他系統,特別是Windows,會將自己的開機loader寫入MBR中,
如果你想用FreeBSDloader蓋寫現存的MBR可以使用下列命令

# fdisk -B -b /boot/boot0 device

如果想以現存的linux loader(LILO)開機,可先開起linux 編輯 /etc/lilo.conf
如下

other=/dev/hdXY (hd是ide硬碟,XY可自己代換成linux上的磁區編號)
table=/dev/hdX
loader=/boot/chain.b (如果兩個系統是在同一個硬碟上可忽略這行)
label=FreeBSD

存檔後執行 /sbin/lilo -v 讓新的變更生效

2. Stage One, /boot/boot1, 和 Stage Two, /boot/boot2
stage1 和 stage2 在概念上屬於同一程式和同一磁碟區域,由於磁區
大小限制,他們被分成了兩個階段,但是安裝時會一起安裝。他們存
在於檔案系統之外,位於開機slice的第一軌,開始於第一個 sector 。

這是 boot0 或是任何其他存放於MBR的程式所要尋找以繼續完成開機
程序的地方。 boot1 也無法超過512bytes,不過這對 FreeBSD disk
label 而言已經足夠。 disklabel 是用來儲存 slice 的相關訊息,並去找
到和執行 boot2 。

boot2 比較高階和精密,boot2 必須要在FreeBSD的檔案系統上找到
檔案,並提供一個介面去選擇 kernel 或 loader 來執行。因 loader
又比 boot2 更高一級,且易於設定,所以 boot2 通常會執行它,
但是通常會直接執行kernel

Example 12-2. boot2 Screenshot

>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/kernel <--執行kernel
boot:

如果要取代現有的boot1和boot2 可用 bsdlabel工具
# bsdlabel -B diskslice (diskslice是指機器開機的slice,例如ad0s1)

3. Stage Three, /boot/loader
loader 是三步驟中的最後一步,且置於 FreeBSD 的檔案系統之內,
通常是/boot/loader.rc 初始化時,loader 會探測終端機和磁碟,
辨識是從哪個硬碟啟動的。開始設置所要開啟的磁碟、設定變數對
應,並啟動解譯程式開始解釋loader所傳遞的命令

loader 然後會讀取並執行 /boot/loader.rc, 預設地讀取
/boot/defaults/loader.conf
以設定可靠的預設變數,讀取
/boot/loader.conf
對這些變數作區域修改。loader.rc 依據這些
變數進行動作,加載任何被選取的模組和核心。

最後,預設地,loader 會停留 10 秒等待按鍵, 若沒有發生中斷
,就開始啟動核心。如果被中斷,用戶會得到一個指令行輔助說明
符, 在這裡用戶得變更變數、解除裝載所有模組、加載模組、最後
啟動 或重新啟動。

4. kernel interaction During Boot
一但 kernel 經由 loader 或 boot2 (略過執行loader),kernel將會
檢查它的開機旗標 (flag) ,如果有,就開始依照旗標做一些必要調節。

常用開機旗標
-a :在kernel初始化階段,訊問要使用哪一個裝置當root檔案系統。
-C :從光碟機開機
-c :執行userconfig,開機階段的kernel配置檔。
-s :進入單人模式
-v :在kernel啟動時顯示較多訊息

5. Device Hints
在FreeBSD5.0版後才出現在起始系統啟動時,loader 會讀取 device.hints
檔案。這個檔案以變數的形式儲存著核心啟動資訊, 有時被稱為
「 device hints 」。 裝置驅動程式用「 device hints " 對裝置進行配置。

Device hints 也可以在 第三階段的boot loader 的指令行輔助說明符中指定。
變數可以用 set /boot/device.hints 設定的變數亦可以在這裡被覆寫。
鍵入 boot loader 中的變數不是永久性的,在下次啟動時就會被忘記。

指令添加,unset 指令移除, show 指令檢視。在檔案 /boot/device.hints
設定的變數亦可以在這裡被覆寫。寫入 boot loader 中的變數並非永久性的,
在下次啟動時就會被忘記。

一旦系統啟動成功,kenv 指令可以用來清楚所有的變數。
檔案 /boot/device.hints 的語法是一行一個變數, 使用「#」作為註釋記號。
每行是按照如下方式組織的:

hint.driver.unit.keyword="value"

第三階段 boot loader 的語法是:

set hint.driver.unit.keyword=value

driver 是裝置驅動程式名,unit 是裝置驅動程式單位名,keyword 是
hint 關鍵字。

關鍵字可以由以下選項組成:

at:指明裝置所連結的匯流排
port:指明所使用 I/O 的起始位址。
irq:指明所使用的中斷要求號。
drq:指明 DMA channel 號。
maddr:指明裝置使用的物理記憶體位址。
flags:給裝置設定各種旗標。
disabled:如果設成 1, 裝置被禁用。

裝置驅動程式能夠接受更多的 hints,建議參看它們的手冊。參看
device.hints(5)、kenv(1)、loader.conf(5) 和 loader(8) 關機手冊以獲得
更多資訊。

6. Init :進行系統控制權轉移
一旦 kernel 完成載入後, kernel 就將控制權交給使用者層的
命令 init ,位於/sbin/init。或是loader的環境變數 init_path
所指定的位置。

自動reboot啟動程序
這個程序會確認系統將要使用的檔案系統是存在的。如果不在,
則fsck就不能正常的被執行去修復磁碟機,接著init把系統切換
成單人模式,系統管理者就可以在這時候直接處理這個錯誤。

單人模式
要進入這模式可以經由自動 reboot 啟動程序,或是在開機階
段設置 -s 參數,或設定 boot_single 的變數給 loader。或是
在多人模式之下執行 shutdown ,不加上reboot (-r)或halt (-h)
參數也可以進入單人模式。

如果系統主控台 console 在 /etc/ttys 之中是設定成 insecure 的,那麼在進
入單人模式時,系統就會要求輸入 root 的密碼。

*insecure的console代表你決定你的console的安全等級是
insecure 的 ; 而不是代表你的
console是insecure,而是你要
多一點的安全防護,則請選擇insecure,而不是secure



多人模式
如果init無誤的找到了你的檔案系統,或結束了單人模式,系統
就會進入多人模式,並開始資源配置(rc)。

7. 系統資源配置(rc)

資源配置系統會先執行預設的配置檔 /etc/defaults/rc.conf 和系
統詳細配置
/etc/rc.conf。接著依照 /etc/fstab 來掛載檔案系統,
再啟動網路服務、和其他的系統監控程式,最後執行部份程式
的起始script。

8. 關機程序

藉由 shutdown 可以控制系統進行關機, init 將會執行
/etc/rc.shutdown這個script。接著送出終止信號給所有的程序,
在此時如果有無法終止的程序就送出 kill (-9)的信號。

參考資料
http://www.freebsd.org/doc/zh_TW.Big5/books/handbook/boot.html
os.還有忘了再哪看到的中文文件~ = =||

2007/05/03

cruel unix

摘錄
You now, unix is a cruel operating system, sometimes parent kills its children, and what it worse, it sometimes turns them into zombies.

詳見pavelmachek

Say Yes

ASKA的認真版



os 他認真起來還真可愛 XDD

La Bamba



歌詞
para bailar la bamba,
para bailar la bamba,
se necesita una poca de gracia.
una poca de gracia pa mi pa ti.
arriba y arriba
y arriba y arriba, por ti sere,
por ti sere.
por ti sere.
yo no soy marinero.
yo no soy marinero, soy capitan.
soy capitan.
soy capitan.
ba-ba-bamba,
ba-ba-bamba,
ba-ba-bamba,
ba...
para bailar la bamba,
para bailar la bamba, se necesita una poca de gracia.
una poca de gracia pa mi pa ti.
arriba, arriba.
r-r-r-r-r, ja! ja!

para bailar la bamba,
para bailar la bamba,
se necesita una poca de gracia.
una poca de gracia pa mi pa ti.
arriba y arriba
y arriba y arriba, por ti sere,
por ti sere.
por ti sere.
ba-ba-bamba.
ba-ba-bamba.
ba-ba-bamba.

magjcjet2

新發現的射擊遊戲,magicjet2

繼我把新版ZooKeeper玩爛之後的首選...

大概還可以讓我玩一陣子XD

Linux Startup Flow

流程圖
power on -> BIOS -> boot loader -> Linux kernel & initrd
-> init scripts -> system


* initrd(init ram disk)補充 *

initrd簡單的說就是將電腦的記憶體(ram)模擬成硬碟。

initrd要包含有
1. a linuxrc script
2. The kernel modules that are needed

boot loader 會將 initrd 和 kernel 載入記憶體。然後 kernel 會偵測現
有的 initrd ,將他解壓縮並掛載成臨時的 root filesystem 。最後開始
執行 linuxrc script。

linuxrc 這個程式會載入所有被需要的模組,(並不是全部模組呀~)
然後掛載真正的 root filesystem(你的硬碟分割區 "/")並執行
pivot_root

這個動作是轉換 initrd 這個臨時 root filesystem 到真正的 root 上。

一直到正確的 root filesystem被掛載後 linuxrc才能夠繼續將開機流程
遞交給 init (/sbin/init) program