2017年8月30日 星期三

ZFS boot

這裡也是筆記, 主角是 ubuntu 14.04 跟 16.04, 著重在虛擬機器內系統移轉, 不在安裝. (安裝我不會)

  • 最少要有一臺 ubuntu 14.04 或 16.04, 指除了被移轉的機器之外還要再一臺.
  • ubuntu 14.04 initrd ZFS script 有些問題, poolname 僅接受 rpool 而已, 特別注意.
  • 在想要被移轉的 ubuntu 上, 先行安裝好幾個套件: zfsutils-linux, zfs-initramfs 與其它相依套件.
  • 以下增加到 /etc/initramfs-tools/modules 中:
    • spl
    • zfs
  • update-initramfs -c -k all
  • 到此時才可以將這個虛擬機器停下, 將虛擬硬碟檔案跟備份虛擬硬碟檔案分別掛到另一個可以正常運作的 ubuntu 底下
  • 在這裡我硬碟僅只使用 MBR 切割, zfs 也僅只有一個區, 外面說明會比較詳細講出如果 zfs 底下的分割區要被掛成 root 時要怎麼做, 但並沒有看到不分割時該怎麼做...
    • 僅只建立一個 MBR partition /dev/sdc1,  fdisk /dev/sdc
    • 建立 ZFS 儲存池, 假設 poolname 叫 BOOTpool:
      • zpool create BOOTpool /dev/sdc1 -O compression=lz4 -O atime=off -O mountpoint=/tmp/BOOTpool
      • zpool set bootfs=BOOTpool BOOTpool
    • copy 要移轉的虛擬硬碟內檔案到 /tmp/BOOTpool/ 下, 也就是整顆硬碟檔案 copy.
    • copy 作業可以丟背景跑, 前景還可以再做件很重要的事:
      • grub-install --boot-directory=/tmp/BOOTpool/boot/ --modules="part_msdos ext2 zfs"
    • 到此時 grub 在stage2 時才擁有讀取 zfs 的能力, 才有機會再讀到 /boot/grub/grub.cfg 執行選單工作, 而此時已經是 stage 3. 否則 grub 會跟你說它不認得 (unknow file system)
    • 檔案 copy 好後記得做些修改的動作, /etc/fstab 因為 zfs 本身就有 mountpoint 的設定所以不需要修改, 改了看來也沒用... boot/grub/grub.cfg 有幾個關鍵設定麻煩注意一下:
      • linux   /boot/vmlinuz => linux   /@/boot/vmlinuz
      • initrd  /boot/initrd.img => initrd  /@/boot/initrd.img
    •  (update) 如果是指定 sub-zpool 假設叫 BOOTpool/sys, 那麼要設成:
      • linux   /boot/vmlinuz => linux   /sys/@/boot/vmlinuz
      • initrd  /boot/initrd.img => initrd  /sys/@/boot/initrd.img
    • 否則 grub 找不到 vmlinuz 跟 initrd 無法開機.
    • 如果是比較複雜的 ZFS 內部分割請參考其它文章像這個
    • /boot/vmlinuz 後面這些 kernel parameter 切記加上 boot=zfs. 因為 zfs 不像其它的 filesystem 可以直接使用, 需要它專有工具 import 所有能用的 zpool 進來後才能掛起來, (所以如果是自製的 initrd RAMdisk image 的話要確認有沒有 zfs 工具存在, 還有掛載的 script, 否則也是沒用), 而每一家 linux distro 在 initrd 裡觸發 zfs 工具的方式都有點不同, ubuntu 是使用 boot=zfs, gentoo 使用 dozfs.
    • ubuntu 的 rootfs 下法是 root=ZFS=BOOTpool, 之所以特別說這是 ubuntu 的下法是因為這個 parameter 其實是 parser 給 initrd 內的 ZFS script 看的而不是給 kernel, 所以每一家 distro 掛法會不一樣是正常情況. 我最後 grub 內的 kernel parameter 那行是這樣:
      • linux /@/boot/vmlinuz-4.11.0-13-generic root=ZFS=BOOTpool ro boot=zfs console=tty0
      • (update) 如果 zpool 假設是 BOOTpool/sys, 上一行 root=ZFS=BOOTpool 改 root=ZFS=BOOTpool/sys
    • grub 改好後才是來最後處理 ZFS...
      • 再一次確認不會自動掛起來: zfs set atime=off BOOTpool
      • umount. zfs umount BOOTpool
      • 修改指定 zpool 掛載點 zfs set mountpoint=/ BOOTpool
      • (update) 或 sub-zpool  掛載點 zfs set mountpoint=/ BOOTpool/sys
      • 離線 zpool export BOOTpool
  • 虛擬機器改回去用這個 ZFS 虛擬硬碟. 
    • 如果開完機開的進去沒問題, 別忘了 /etc/default/grub 多加一些東西:
      • GRUB_CMDLINE_LINUX="boot=zfs"
      • update-grub
      • 請注意 update-grub 對目前的 ubuntu 14.04 無效, 但 ubuntu 14.04 可以硬裝 16.04 用的 grub-common 套件解決這個問題.
      • (update) 如果 rootfs 是在某一個 zpool 非 sub-zpool 裡的話, update-grub 中 grub-mkconfig 會很雞婆的在 zpool name 後面加個 "/" 導致開不了機, 而使用 sub zpool 的話不會有這個問題. 因此建議如上述文章所提, rootfs 最好放在某一個 sub zpool 裡如 BOOTpool/sys 不要直接是整個 zpool 如 BOOTpool.
差不多就是這樣. 
  • ubuntu 14.04 會有機會認不得 root=ZFS=BOOTpool 中的 BOOTpool, 如果不認得, 就改成它內定的 "rpool" ...
  • ubuntu 14.04 中的 grub-probe 跟 update-grub 在 rootfs 最後掛成 ZFS 後無法認到 ZFS. 但 ubuntu 14.04 可以硬裝 16.04 用的 grub-common 套件解決這個問題.
  • mountoiint 設定成 legacy 我沒有實驗成功讓它掛起來, 這種設定在一開始 zpool import 時似乎就無法找到.
  • ZFS 本身不支援 /dev/disk/by-label 與 /dev/disk/by-uuid 僅只有 /dev/disk/by-path, 所以很多筆記會以 by-path 為主. 可是我不愛用.

ZFS 在當別的儲存載體時不錯, 但當 linux rootfs 時是不是比較好, 我自己是不這麼認為...

update 20180615: 新增 rootfs 擺在 sub zpool 裡時 grub.cfg 的路徑修改. 但請注意, ubuntu 的 grub 似乎不認 main zpool 名字, 只認 sub zpool 而已 (ArchLinux 的會認, 所以 ArchLinux wiki 的教學拿來 ubuntu 上用要自己懂的修改), 所以以前使用 BOOTpool 時是 /@/ 現在使用 BOOTpool/sys 時是 /sys@/, 我沒有試過同一顆硬碟裡有一個以上 zfs 分割區時會有什麼問題, 可能只認 partition number 來分吧? 我不知道.

2017年8月28日 星期一

WEC7 wave 3

Windows Embedded Compact 7 wave 3 update (2017/06)
en_windows_embedded_compact_7_december_2014_x86_x64_dvd_6315546.iso
自己找....

不要再來找我要啥 CE 的 service, 我只會回給你十個字, 去死吧去死吧去死吧幹

2017年8月12日 星期六

btrfs 一些筆記

純筆記, 有很多土炮之處在所難免.


  • 建立 btrfs:
    • 基本上 btrfs 你把它看做是 ext4fs 的衍生型就好
    • mkfs.btrfs /dev/sdv -L "btrfsroot" -U "0000" UUID 要 ubuntu 16.04 的工具才有
    • 轉換自 ext4fs btrfs-convert /dev/sdv
    • mkfs.btrfs 我目前不知道怎麼增加可用檔案數 (ext4 叫 inode), 只能靠轉換.
  • 壓縮:
    • mount /dev/sdv /mnt compress=zlib 或 mount /dev/sdv /mnt compress=lzo
    • btrfs 似乎是看檔案壓縮.
    • 全部重壓成 lzo : btrfs filesystem defragment -r -v -clzo /
  • kernel 掛載:
    • 用 UUID 就可以. btrfs 本身就有支援 label / uuid 不像 zfs.
    • initrd.img 要改 /etc/initramfs-tools/modules 加上 btrfs
    • 記得 update-initramfs
  • grub 支援:
    • grub-install --modules="part_msdos part_gpt btrfs" 
    • 其它要加什麼比照辦理.
    • 記得 update-grub
我只用它的壓縮, 其它沒研究. 就這樣.

update 2017/08/14

  • 如果是用於 VMware vmdk 檔案存放, 那強烈不建議使用 btrfs. 簡單的說, vmdk 它只是一個磁碟映像檔, 當你這個虛擬硬碟檔案用滿再清空 (wipe 還 zerofree 啥的都可以), btrfs 不會釋放空間, zfs 可以, 而且 btrfs 再重 defragment 後一樣無效, 這點要特別注意.
  • 虛擬機器裡掛 btrfs 不管用 zlib 還 lzo 壓縮, 外面的 vmdk 檔掛在 zfs 用 lz4 壓縮的話, 還可以有效的再壓一道. 工作用的 ubuntu 14.04.5 amd64 原本 4GiB 的使用空間最後被壓到剩 1.7GiB...
其它想到我再寫.

2017年8月7日 星期一

ZFS 一些筆記

有很大多指令 zpool 跟 zfs 很像, 這裡只記幾個我常用的...

建立:
zpool create poolname /dev/sdv2 -m /opt/mount2
-m 指掛載點,而有幾個選擇, none 表不指定掛載點, legacy 表需被動指定掛載點. 如果想要跟過去 ext4fs 掛載方法那樣的話要選 legacy.

設定壓縮為 lz4 (基本上要求速度就是 lz4)
zfs set compression=lz4 poolname

查看壓縮比
zfs get compressratio poolname

導入 (在這之前要先行掛載所有 zfs kernel module)
zpool import poolname
如果找不到:
zpool import -d /dev
如果 /dev 底下的全抓進來:
zpool import -d /dev -a

列出目前有哪些 zfs pool 可用:
zfs list
zpool list

排除某一個 pool
zpool export poolname
#但請注意 export 後 zfs 依舊鎖定這整個 block device.

刪除特定 pool (要先 import )
zpool destroy poolname
#雖然刪除但 block device 依舊被鎖定.

如果要在一個 block device 上讓 zfs 與其它 file system 如 ext4 共存的話, 就必需特別注意 zfs 鎖定 block device 的特性這點, 基本上只要建立過 zfs pool, 所有在其它同一個 block device 上的 partition file system 建立或刪除的動作都會被擋掉, 所以如果要共存, 必需把其它分割區先行建立好, 再建 zfs...

以 /dev/sdv 為例:
fdisk /dev/sdv 先產生 /dev/sdv1, /dev/sdv2 兩個分割區, 先 mke2fs /dev/sdv1 再 zpool create poolname /dev/sdv2

至於 zfs 掛到根目錄, 再說吧...
update 17/08/30 ZFS boot 參考這篇.. http://yoko-hama.blogspot.tw/2017/08/zfs-boot.html

2017年8月5日 星期六

ace combat 04 pcsx2 pnach

啊就 cheat code 啦講那麼多... 有些是我自己找出來的.
// 5ED8FB53.pnach
//all fighters, swapons
patch=1,EE,002A0220,word,FFFFFFFF
patch=1,EE,002A0224,word,000003FF
patch=1,EE,002A0228,word,FFFFFFFF
patch=1,EE,002A022C,word,000003FF
patch=1,EE,002A0230,word,FFFFFFFF
patch=1,EE,002A0234,word,000003FF
patch=1,EE,002A0240,word,FFFFFFFF
patch=1,EE,002A0244,word,000003FF
//already forgot...
patch=1,EE,002A0248,word,3CF0F300
patch=1,EE,002A024C,word,0000030C
//all fighters fun round 9999
patch=1,EE,002A1BD8,word,00FF270F
patch=1,EE,002A1BE8,word,00FF270F
patch=1,EE,002A1BF8,word,00FF270F
patch=1,EE,002A1C08,word,00FF270F
patch=1,EE,002A1C18,word,00FF270F
patch=1,EE,002A1C28,word,00FF270F
patch=1,EE,002A1C38,word,00FF270F
patch=1,EE,002A1C48,word,00FF270F
patch=1,EE,002A1C58,word,00FF270F
patch=1,EE,002A1C68,word,00FF270F
patch=1,EE,002A1C78,word,00FF270F
patch=1,EE,002A1C88,word,00FF270F
patch=1,EE,002A1C98,word,00FF270F
patch=1,EE,002A1CA8,word,00FF270F
patch=1,EE,002A1CB8,word,00FF270F
patch=1,EE,002A1CC8,word,00FF270F
patch=1,EE,002A1CD8,word,00FF270F
patch=1,EE,002A1CE8,word,00FF270F
patch=1,EE,002A1CF8,word,00FF270F
patch=1,EE,002A1D08,word,00FF270F
patch=1,EE,002A1D18,word,00FF270F
patch=1,EE,002A1D28,word,00FF270F
//adjust almost fighters sp.weapon round to 255
patch=1,EE,002A1BEE,byte,000000FF
patch=1,EE,002A1BFE,byte,000000FF
patch=1,EE,002A1C0E,byte,000000FF
patch=1,EE,002A1C1E,byte,000000FF
patch=1,EE,002A1C2E,byte,000000FF
patch=1,EE,002A1C3E,byte,000000FF
patch=1,EE,002A1C4E,byte,000000FF
patch=1,EE,002A1C5E,byte,000000FF
patch=1,EE,002A1C6E,byte,000000FF
patch=1,EE,002A1C7E,byte,000000FF
patch=1,EE,002A1C8E,byte,000000FF
patch=1,EE,002A1C9E,byte,000000FF
patch=1,EE,002A1CAE,byte,000000FF
patch=1,EE,002A1CBE,byte,000000FF
patch=1,EE,002A1CCE,byte,000000FF
patch=1,EE,002A1CDE,byte,000000FF
patch=1,EE,002A1CEE,byte,000000FF
patch=1,EE,002A1CFE,byte,000000FF
patch=1,EE,002A1D0E,byte,000000FF
patch=1,EE,002A1D1E,byte,000000FF
patch=1,EE,002A1BF2,byte,000000FF
patch=1,EE,002A1C02,byte,000000FF
patch=1,EE,002A1C12,byte,000000FF
patch=1,EE,002A1C22,byte,000000FF
patch=1,EE,002A1C32,byte,000000FF
patch=1,EE,002A1C42,byte,000000FF
patch=1,EE,002A1C52,byte,000000FF
patch=1,EE,002A1C62,byte,000000FF
patch=1,EE,002A1C72,byte,000000FF
patch=1,EE,002A1C82,byte,000000FF
patch=1,EE,002A1C92,byte,000000FF
patch=1,EE,002A1CA2,byte,000000FF
patch=1,EE,002A1CB2,byte,000000FF
patch=1,EE,002A1CC2,byte,000000FF
patch=1,EE,002A1CD2,byte,000000FF
patch=1,EE,002A1CE2,byte,000000FF
patch=1,EE,002A1CF2,byte,000000FF
patch=1,EE,002A1D02,byte,000000FF
patch=1,EE,002A1D12,byte,000000FF
patch=1,EE,002A1D22,byte,000000FF
patch=1,EE,002A1C36,byte,000000FF
patch=1,EE,002A1C56,byte,000000FF
patch=1,EE,002A1C66,byte,000000FF
patch=1,EE,002A1C96,byte,000000FF
patch=1,EE,002A1CA6,byte,000000FF
patch=1,EE,002A1CC6,byte,000000FF
patch=1,EE,002A1CD6,byte,000000FF
patch=1,EE,002A1D06,byte,000000FF
//adjust almost fighter's sp.weapon carry quantity
patch=1,EE,002A1C2D,byte,00000006
patch=1,EE,002A1C5D,byte,00000006
patch=1,EE,002A1C6D,byte,00000006
patch=1,EE,002A1C8D,byte,00000006
patch=1,EE,002A1C9D,byte,00000006
patch=1,EE,002A1CAD,byte,00000006
patch=1,EE,002A1CBD,byte,00000006
patch=1,EE,002A1CCD,byte,00000006
patch=1,EE,002A1CDD,byte,00000006
patch=1,EE,002A1CED,byte,00000006
patch=1,EE,002A1CFD,byte,00000006
patch=1,EE,002A1D0D,byte,00000006
patch=1,EE,002A1D1D,byte,00000006
patch=1,EE,002A1D2D,byte,00000006
patch=1,EE,002A1D2D,byte,00000006
patch=1,EE,002A1D2D,byte,00000006
patch=1,EE,002A1D2D,byte,00000006
patch=1,EE,002A1D2D,byte,00000006
patch=1,EE,002A1BF1,byte,00000006
patch=1,EE,002A1C21,byte,00000006
patch=1,EE,002A1C31,byte,00000006
patch=1,EE,002A1C41,byte,00000006
patch=1,EE,002A1C51,byte,00000006
patch=1,EE,002A1C61,byte,00000006
patch=1,EE,002A1C71,byte,00000006
patch=1,EE,002A1C91,byte,00000006
patch=1,EE,002A1CA1,byte,00000006
patch=1,EE,002A1CB1,byte,00000006
patch=1,EE,002A1CC1,byte,00000006
patch=1,EE,002A1CD1,byte,00000006
patch=1,EE,002A1CE1,byte,00000006
patch=1,EE,002A1CF1,byte,00000006
patch=1,EE,002A1D01,byte,00000006
patch=1,EE,002A1D11,byte,00000006
patch=1,EE,002A1D21,byte,00000006
patch=1,EE,002A1C35,byte,00000006
patch=1,EE,002A1C55,byte,00000006
patch=1,EE,002A1C65,byte,00000006
patch=1,EE,002A1C95,byte,00000006
patch=1,EE,002A1CA5,byte,00000006
patch=1,EE,002A1CC5,byte,00000006
patch=1,EE,002A1D05,byte,00000006
// 00-UGBS 01-UGBM 02-UGBL 03-PGB 04-CLB 05-FAEB 06-BDSP
// 07-NPB 08-RCL 09-SOD 0A-XAGM 0B-LASM 0C-XMAA 0D-XLAA 0E-QAAM
//x02 sp.weapn adjust XAGM/FAEB/QAAM
patch=1,EE,002A1D2C,byte,0000000A
patch=1,EE,002A1D30,byte,00000005
patch=1,EE,002A1D34,byte,0000000E
//f-5e
patch=1,EE,002A1BEC,byte,0000000B
patch=1,EE,002A1BFC,byte,00000003
//f-4e
patch=1,EE,002A1BF0,byte,0000000A
patch=1,EE,002A1C00,byte,0000000E
//f-16
patch=1,EE,002A1C0C,byte,0000000C
patch=1,EE,002A1C10,byte,0000000A
//f-22
// patch=1,EE,002A1CEC,byte,0000000E
patch=1,EE,002A1CF0,byte,00000005
//s-37a
// patch=1,EE,002A1D0C,byte,0000000E
patch=1,EE,002A1D10,byte,00000005
//adjust f-15e sp.weapon to FAEB & QAAM
patch=1,EE,002A1C8C,byte,00000005
patch=1,EE,002A1C94,byte,0000000e
//adjust su-35 sp.weapon to FAEB
patch=1,EE,002A1CE0,byte,00000005