2008年12月28日 星期日

FBWF 概說 和 FBWF+WIM 的問題

以下純屬推測...歡迎研究討論

FBWF 其實是 Windows XP-E (Windows® XP Embedded) 所推出的
Windows® XP EmbeddedFile 和 WinPE 有類似的地方
Windows® XP EmbeddedFile 也有人簡稱 XPE
不過我自己為了分別是用 XP-E 和 XPE 來區分
一個是 Windows XP-E 一個是 WinPE 不要搞混
在實質上... XP-E 才是真正用在 崁入式系統...也就是 迷你系統
其實大家要求的 XPE...應該是要去用 XP-E 去做才對
不過這要有相對的知識技術...我是做不來啦(光 XPE 就快不行了)
Windows PE 是用來 維修 測試 或 安裝系統 用的一個臨時系統...

可以看一下這個 pdf 技術文件
按住可移動圖片 相關連結 (須登錄後才能看到)

簡單說 FBWF (File-Based Write Filter)
照字面翻意思大概為 檔案基本寫入過濾器(濾鏡)
技術文件中很多地方用了很多專有名詞可能很難看懂(我也不是很懂)
但簡單來說和我最開始推測的...有一部份是差不多的
簡單說...是用 "寫入篩選快取記憶體" ... 寫入篩選 指的應該就是 Write Filter 的意思
也就是說一部份的重點在這個 "寫入篩選快取記憶體"

只不過 FBWF 照 pdf 文件的原意用途...是用於 檔案保護
不過拿被 XPE 上...卻不是這樣用

這裡先說 pdf 文件中說的 FBWF 大至上的原理
程度較高的...看文件中的 結構說明圖片 應該就有大概的瞭解

要簡單說的話是 磁碟 + 快取
也就是 磁碟 和 快取 的結合

以 pdf 文件中的名詞來說...也就是

受保護的磁碟區 + 寫入篩選快取記憶體 (Write Filter) = 複合檔案系統檢視

而 複合檔案系統檢視 就是我們實際上看到的 檔案系統資料

從某個角度來看和 WIM 開 寫入模式 有點像
WIM 開 寫入模式 的情況
WIM 檔 + 暫存目錄 = 實際看到的檔案系統資料

把上面2個用意義來表示

原始資料 + 變動資料 = 實際看到(當前)資料

(註: WIM 在解掛時...才會把 暫存目錄 中的 變動資料 重新打包回 WIM檔 中)


*************************************
前面有提到 FBWF 一部份的功能在於 保護檔案
也就是 FBWF 的功能在於
如果 啟用的 FBWF 的 保護檔案
不管怎麼修改檔案...實際上只是在 寫入篩選快取記憶體
只要重開機就還原了

受保護的磁碟區(原始資料) + 寫入篩選快取記憶體(實際上的變更資料) = 複合檔案系統檢視(實際上的檔案系統資料)

簡單說... XPE 使用了 FBWF 中的 寫入篩選快取記憶體 來產生額外的可用空間

*************************************
WIM 和 FBWF 而產生的 BUG:

我說的 WIM+FBWF BUG 不是 FBWF 的 BUG
而是指 "WIM+FBWF" BUG

WIM 的部份這裡我不多說 (簡單說就是掛載而以)

如果把 WIM 掛載 和 FBWF 會發生什麼情況咧
照我前面說的 FBWF 大概的原理...這裡我用意義簡化一下

原來磁區的檔案系統資料 + 寫入篩選快取記憶體 = 實際看到的檔案系統資料

如果在 FBWF 啟動後...要用 WIM 掛載...會因為 FBWF 而不能掛載
簡單說因為 FBWF 控制了 "磁區層級" "檔案層級" 的管理
這2個 我也不太懂...在文章中...這2個只是很不起眼的名詞
不過看文章就是要知道重點...就算不知道那個 名詞 在說什麼

因為電腦很多東西都很喜歡分 層級...像 網路 也分什麼 OSI 7層

雖然不知道 "磁區層級" "檔案層級" 的意義
因為 pdf 文件中也沒詳細說明
不過大至上還是推測的出來...

想簡單一點...就是 系統處理 的動作
而將其分為幾個 層級(不同的應用方面和處理動作)
(層級 之間也可能有連帶關係)

例如: 類似像一般使用用 虛擬光碟 掛載 映像檔
當然所 對應 的 層級 可能不一樣
例如 搞不好有 "裝置層" 之類的

虛擬光碟 就是在原本系統的 相對應的層級 中加入一台 光碟
而光是增加 裝置 也不行...也要在別的 層級 做相對應的動作
例如 負責管理 C: D: E: 這些 磁碟代號 的層級...加入 裝置 的 磁碟代號

大家也可以試一下 subst 這個指令
輸入 subst /? 就知道其用途了...這就是一種應用

所以雖然 不知道 "磁區層級" "檔案層級" 的會處理的動作和應用
(不過看字意大概也知道和什麼有關係吧)
不過... WIM 和 FBWF 很明顯...在這裡有了衝突

WIM 是掛載到 目錄 ...基本上應該是 "檔案層級" 的應用
FBWF 應該是包含 "磁區層級" 和 "檔案層級"

這裡可以分析推測一下衝突的原理
前面有說到 啟動 FBWF 後才掛載 WIM 的情況
這可能是因為 FBWF 的關係...FBWF 的原理是

原來磁區的檔案系統資料 + 寫入篩選快取記憶體 = 實際看到的檔案系統資料

WIM 不是 "原來磁區的檔案系統結構" 也不是 "寫入篩選快取記憶體"
除非 WIM 掛載可以加入到 FBWF 的 "原來磁區的檔案系統結構" 或 "寫入篩選快取記憶體"
否則就不會變成 "實際看到的檔案系統結構"

而這也可以說明了先掛載 WIM 的情況

前面有提到以 寫入模式 掛載時:
WIM 檔 + 暫存目錄 = 實際看到的檔案系統資料

而如果是一般模式:
WIM 檔 = 實際看到的檔案系統資料 (掛載的目錄為 唯讀)

也就是說...先掛載 WIM 的情況在 層級 的結果上是 應用 WIM 處理後的情況
而這之後才使用 FBWF 就會變成下面的情況

先掛載 WIM 應用的結果:
一般模式:
WIM 檔 = 實際看到的檔案系統資料A
寫入模式:
WIM 檔 + 暫存目錄 = 實際看到的檔案系統資料A

後啟動 FBWF 結果:
原來磁區的檔案系統資料 = 檔案系統結構A ... (因為 WIM 先應用了)

FBWF本來的應用:
原來磁區的檔案系統資料 + 寫入篩選快取記憶體 = 實際看到的系統資料(檔案系統資料B)

2個情況加在一起最後等於:
WIM 掛載後應用結果的檔案系統資料 A + 寫入篩選快取記憶體 = 實際看到的系統資料(檔案系統資料B)

而且別忘了 FBWF 的檔案變動 是用 "寫入篩選快取記憶體"
所以 WIM 一般掛載 時的 "唯讀" 情況...因為 FBWF 是寫入 "寫入篩選快取記憶體" ...而不存在了


************************************

最後...這篇長文...有些可能說的不是很正確
因為我不是專業技術人員
大多是參考了資料和測試...所推判的結果
但主要是要解釋 原因 情況 問題 大概的 "意義"
所以細部的地方不一定對...只是針對 "意義" 上說明大概的原理

簡單的來說...意義 就是 WIM+FBWF 之間有衝突 而有 BUG 可以利用
而不知道實在搞不清楚的人...在實作測試中就可以發現
所以還是多多 DIY 做測試吧!

2008年12月26日 星期五

從一無所有到一無所缺~觸動全球人心的生命戰士Nick

2008年12月23日 星期二

在硬碟上跑XPE-NoName(RAMDISK)-20080625版

【安裝步驟】
1.硬碟開機啟動區格式化為 fat32(因為使用 GRUB4Dos 作為開機選單的關係)。
2.以【grubinst_gui.exe】將 GRUB4Dos 寫入硬碟之MBR。
3.拷貝【所需複製的檔案】至硬碟之根目錄。
把 XPE 檔案都放到 根目錄下(如下)
boot\
OUTTOOL\
BOOTFONT.BIN
grldr
RXPE.COM
RXPE.IM_
RXPE.SIF
SETUPLDR.BIN
\boot\grub\menu.lst 內容要設為
title XPE-NoName(RAMDISK)
find --set-root /SETUPLDR.BIN
chainloader /SETUPLDR.BIN
4.完成!即可開機使用。

【注意事項】
NONAME XPE的ISO檔案請用酒精燒錄比較不會有問題!

NoN XPE 的檔案共享設定 ( XP 連 XPE )是... XPE 共享...XPE 要設定
http://nonamexpe.duc.cc/viewtopic.php?f=47&t=560#p3629
1.執行Penetcfgcht.exe(NoN XPE 在安裝好網路模組和驅動後,一定可以看到 PE 的網路設定程式 penetcfg)
2.網路驅動器→網路識別→注意工作群組名稱的一致性
2.檔案共享→輸入密碼→建立帳號
3.執行檔案總管→選擇要共享的磁碟或目錄→右鍵→(內容)或是(共用和安全性)→選共用→按 新增共用→輸入共用名稱然後按確定(註解可以不要輸入)→新增共用完成後→按套用就好了
4.另一台電腦要連線時,一樣執行檔案總管在網址輸入 XPE 那台電腦的區域IP→會出現要輸入 帳號與密碼的視窗→輸入前面在 XPE 中設的帳號與密碼→帳號→密碼無誤的話就可正常連線了

NoN XPE 的檔案共享設定 ( XPE 連 XP)是... XP 共享...XP 要設定
http://nonamexpe.duc.cc/viewtopic.php?f=47&t=715&p=5170&hilit=NoN+XPE+%E7%9A%84%E6%AA%94%E6%A1%88%E5%85%B1%E4%BA%AB%E8%A8%AD%E5%AE%9A#p5170
1.基本上 XP共享 分為
(1)簡易模式 (任意帳號可登入...但 權限 只有 唯讀)
(2)傳統模式 (和 相關文章 中的 XPE 差不多...要 帳號密碼 ... 可設定權限)
2.簡易模式 設定就可以連了...只要注意 XPE 連 XP 的注意事項(後面會說)
3.傳統模式 和 XPE 共享的設定方式差不多...(可以設權限...簡易模式 不能)
4.不過一樣要先在 XP 建立帳密...才能讓 XPE 連入 (和 XP 連 XPE 反過來而以)
5.XPE 連 XP 的方式...基本上其實和 XP 連 XPE 也是差不多
XPE 連 XP 有2個方式
(1)和 XP 時一樣...用檔案總管輸入 \\xxx.xxxx.xxx.xxx\共享名稱
(2)用 PENETCFG 的 網路驅動器 (即 網路硬碟) 來連接 (一樣用 \\xxx.xxxx.xxx.xxx\共享名稱)
6.注意事項
和 XP 連 XPE 不同的是...第1次 連接時...不能直接用 \\xxx.xxx.xxx.xxx\
這可能會連線失敗 (但實際上有連線)...
而導致就算後面輸入正確的 \\xxx.xxxx.xxx.xxx\共享名稱 也不能連線
如果 第1次連線...有出現連線失敗的訊息...而導致後面都不能連
請到 CMD 下...使用
net use
將查到的 遠端 資料在用 (有多少砍多少)
net use /delete \\xxx.xxx.xxx.xxx\xxxxx
刪除連線...
之後在重新連線
記得不要又輸入錯直接去用 \\xxx.xxx.xxx.xxx\
要用 \\xxx.xxxx.xxx.xxx\共享名稱
這大概是因為 雖然顯示 連線失敗 但 實際上 連線 存在了
相同連線無法重覆連接...所以要先刪除連線

光碟版(080625),沒有修改任何東西,開機後直接進入到桌面,沒有載入任何模組!
可能原因:
PECMD LOAD \ 有一個小 bug 和 硬體無關 ... 是 分割區 的問題
舉個例...
例如有 3個分割區 ... 但在 XPE 中 只有前2個可以配置到 代號(C: D:)... 第3個有問題無法配置(例如 根本不是 FAT32 或 NTFS)
這會影響到 PECMD LOAD \ 的方式...大概只會 LOAD C: 和 D:
會卡在 第3個分割區...之後的 光碟 或 USB-Flash 也就無法載入 OUTPECMD.INI
推測 PECMD LOAD \ 時...會以 分割區(或 磁碟)為單位
用以相對的代號...但因為有分割區沒配置到代號...導致指令中斷或失敗
這是我遇過的情況...用 080625 時...載入不了 OUTPECMD.INI
結果是其中一個分割沒配置到代號(FAT32分割區小於 8M)
用我自己改的 080625 可以載入...因為我有用我的 LOADINI ... 並不是直接用 PECMD LOAD \ 的方式
簡單說 PECMD LOAD \
有若干缺點...當 分割區 或 代號 並不是很正常時...很容易出錯....由其光碟又都在最後面
處理方式:
可以試一下...
建立一個 C:\OUTOOL\OUTPECMD.INI
內容是(前面都要多空一行...要儲存成 UNICODE 的格式...如果在 XPE 中光碟是 E:)
LOAD E:\OUTTOOL\OUTPECMD.INI

2008年12月22日 星期一

How To Copy Master Boot Record (MBR) Between Hard Disks

In Linux you can use the dd command to copy MBR from one hard disk to another. You can also use dd to backup your master boot record to a different (or same) media. One of the common use of MBR copying is to ensure transparent fail-over in RAID-1 hard-disk array, should one hard-disks fail. Read more for examples.

How to copy master boot record from hda to hdb
dd if=/dev/hda of=/dev/hdb bs=512 count=1

BTW: Today I used this command to create identical MBR on my RAID-1 array. So when I removed the first hard-disk from the RAID-1 array, the second hard-disk continued to function without any issue. It is as if nothing has happened at all. Only when you look at /proc/mdstat you can see that only one hard-disk of the array is available.

How to backup master boot record of hda
dd if=/dev/hda bs=512 count=1 > hda_backup

hda_backup now contains the backup of MBR of hda.

How to restore master boot record of hda from hda_backup backup file
dd if=hda_backup of=/dev/hda bs=512 count=1

Note: Replace hda and hdb with the respective identifier for your drives. Hard disks have identifiers like hda, hdb… or sda, sdb… etc. on Linux machines.


2008年12月17日 星期三

rpm vs. dpkg 常用參數對照

dpkg 是 Debian Linux 的套件管理程式, 對於習慣 rpm 的人來說, 一開始接觸 dpkg 時還真有點不太能適應, dpkg --help 查了又忘、忘了又查...

於是整理了一下兩種指令的對照表, 這樣就比較好上手了 :)

安裝

目的 rpm 用法 dpkg 用法
安裝指定套件 rpm -i pkgfile.rpm dpkg -i pkgfile.deb

查詢

目的 rpm 用法 dpkg 用法
顯示所有已安裝的套件名稱 rpm -qa dpkg -l (小寫 L)
顯示套件包含的所有檔案 rpm -ql pkgname (小寫 L) dpkg -L pkgname
顯示特定檔案所屬套件名稱 rpm -qf /path/to/file dpkg -S /path/to/file
查詢套件檔案資訊 rpm -qip pkgfile.rpm (顯示套件資訊)
rpm -qlp pkgfile.rpm (小寫 L, 顯示套件內所有檔案)
dpkg -I pkgfile.deb (大寫 I )
dpkg -c pkgfile.deb
顯示指定套件是否安裝 rpm -q pkgname (只顯示套件名稱)
rpm -qi pkgname (顯示套件資訊)
dpkg -l pkgname (小寫 L, 只列出簡潔資訊)
dpkg -s pkgname (顯示詳細資訊)
dpkg -p pkgname (顯示詳細資訊)

移除

目的 rpm 用法 dpkg 用法
移除指定套件 rpm -e pkgname dpkg -r pkgname (會留下套件設定檔)
dpkg -P pkgname (完全移除)

在 Debian 使用 alien 處理 RPM 套件

alien 可處理 .deb、.rpm、.slp、.tgz 等檔案格式, 進行轉檔或安裝.
於 Debian 安裝非 Debian 套件時, 可使用 alien 進行安裝.
安裝 alien 套件: apt-get install alien

  • 在 Debian 安裝 RPM 套件: alien -i quota-3.12-7.i386.rpm
  • 製作成 deb 的套件格式: alien -d quota-3.12-7.i386.rpm
  • 製作成 rpm 的套件格式: alien -r quota_3.12-6_i386.deb

2008年12月14日 星期日

Slax 就是帥!



Slax 觀念
在 Slax 5 的時代, modules 的副檔名是 .mo,而到了 Slax 6, modules 的副檔名是 .lzm。

Slax 是根基於 Slackware 發展出來的,Slackware 的套件副檔名都是 .tgz,要將 .tgz 轉換成 .mo 或 .lzm,可以進入 Slax 後使用 tgz2lzm 這個工具來轉換,或是到 http://myslax.bonsonno.org/ 下載 MySlax Creator (for Windows) 這個工具將 .tgz 轉換成 .mo。

為了讓 Slax 6 能使用 Slax 5 這些套件,可將 ftp://ftp.slax.org/SLAX-5-modules/ 下載的套件 .mo 副檔名直接改為 .lzm。或將 http://slackware.cs.utah.edu/pub/slackware/slackware-current/slackware/ 下載的套件 .tgz 以 tgz2lzm 來轉換成 .lzm。

SLAX Cheatcodes

Cheatcodes for SLAX Booting parameters or cheatcodes, are used to manipulate the booting process of Linux. Some of them are common for all Linux versions, others are specific to SLAX only. You can use cheatcodes to enable or disable specific hardware detection, to start SLAX from a harddisk or other media, to skip the login prompt and start GUI, etc.

The Process:

With SLAX installed, start to boot your computer. Within a few seconds a graphical SLAX logo should appear. (it's usually there for less then 5 seconds). You will see a "boot: " prompt at that time, under the graphical logo (at the bottom of the screen). Start typing one of the following boot options immediately to be faster than the timeout, or press F1 for a brief help menu.

SLAX Cheatcodes and their functions:

slax acpi=off

slax nohotplug

slax nopcmcia

slax noagp

disables specified hardware autodetection in the case of hangups. Your hardware won't be detected at all, you'll have to use the "pcimodules" command after logging into SLAX and you'll have to try to modprobe all needed modules from the list manually

slax nodma

disable DMA for all CD-ROMs and disks

slax nohd

don't mount any harddisks at all.

slax nocd

don't mount any cdroms at all.

slax nosound

mute sound instead of raising volume to 77%

slax from=/dev/hda1/slax.iso

slax from=path/to/slax.iso

slax from=/dev/hda1

slax from=path/to/slax/

To load SLAX data from different place instead of the boot device. First example will search for slax.iso, only on hda1. Second example will search for 'path/to/slax.iso' on all devices. The first device containing the path/file is used. Third example expects that the ISO is unpacked to hda1. Fourth example searches through all disks for a directory 'path/to/slax' and expects the contents of unpacked ISO in there.

slax passwd=somepass

slax passwd=ask

set root's password to "somepass", or ask (with =ask) for a new password during the boot, before starting slax (don't worry, the new password won't be shown at the login screen)

slax webconfig=passphrase

slax webconfig=ask

manage SLAX webconfig automatically, restore last session from SLAX web during boot and save all modifications when you shutdown slax.

slax noguest

disable guest user so he can't log in.

slax changes=/dev/device

all changes you made in SLAX are kept in memory until you reboot. But with this boot parameter, you tell SLAX to use different device then memory for storing changes. You can, for example, format your disk partition /dev/hda1 with some Linux filesystem (eg. ext2) and then use changes=/dev/hda1 to store all changes to that disk. This way you won't loose your changes after reboot.

slax toram

slax copy2ram

copy all files (all required and optional modules) to RAM. You'll need at least 320MB of RAM to do this and boot SLAX properly. This will slow down the boot phase but it will speed up SLAX!

slax floppy

enable floppy automounting during startup. This option also causes that settings saved by "configsave" command will be restored from the floppy diskette too.

slax load=module

load optional modules from /optional/ directory on the CD. You can use full module name (module.mo) or you can skip the extension.

slax noload=module

slax noload=module[1];module[n]

disable loading of any modules specified. This affects all the modules on SLAX CD, including /base and /modules, so using noload=kde will disable loading of all modules with 'kde' in the name. It is useful with copy2ram cheatcode, because any un-used module is not copied to ram.

slax debug

enable debug mode (start bash several times during the boot) hit Ctrl+D to continue booting.

boot: slax autoexec=…

boot: slax autoexec=startx

boot: slax autoexec=xconf;startx

Execute specified command(s) instead of SLAX login. In this example, skip slax login prompt and automatically start XWindow system. Use semicolon (;) as command separator.

memtest

test RAM with memtest (instead of starting SLAX).