2017年9月19日 星期二

force remove

dpkg --purge --force-all package

if package had newer version, idiot 'apt-get remove' will install newer version package then remove old version (like kernel), equal not do remove. so we need using dpkg with --force-all command remove it enforce

2017年9月13日 星期三

X compact 的相機爛到一個不可思議...

我的應用非常簡單, 拍一個啟動電容而已, LED 為手電筒模式, 常開... 有連續光源打光的情況下都可以把快門設到 1/32s, ISO 降低到 250 造成拍攝晃動, 我真的無法再忍受這麼爛的設計決定貼上來...


 我原本以為啟動電容不會壞, 我錯了. 我一直都知道 X compact 的相機很爛, 沒想到是這麼的爛到不可思議的爛

2017年9月5日 星期二

推薦套件 zram

zram 是一個 swapfs 的工具, 它可以把 swap 重導向過來, 經過壓縮後, 仍舊擺在記憶體裡.
https://en.wikipedia.org/wiki/Zram

因為一般狀況來說 OS 會保留一些緩衝空間, 並不會真的等到記憶體不夠用時再來 swap, 有些被 suspend 的 task 也會被丟去 swap 不佔用到主記憶體, 這時 zram 就很有用了.

zram 工具在 ubuntu 上叫 zram-config
安裝好重開機後你會看到 /dev/zram?, ?是編號, 會看你有幾顆 CPU 就到 CPU數 -1 個, 然後用 swapon 看就可以看到多了那麼多個.



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
    • 否則 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
    • grub 改好後才是來最後處理 ZFS...
      • 再一次確認不會自動掛起來: zfs set atime=off BOOTpool
      • umount. zfs umount BOOTpool
      • 修改掛載點 zfs set mountpoint=/ BOOTpool
      • 離線 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 套件解決這個問題.
差不多就是這樣. 
  • 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 時是不是比較好, 我自己是不這麼認為...



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