簡單的說這個工具專門清洗非使用中磁區的, 對 SSD 有沒有用我不確定, 但如果你是 VM, VM 裡跑的又是較老舊的 OS 如 WinXP, VM 檔案又是放在有壓縮功能的檔案系統如 btrfs, zfs, 這個清除工具就可以幫你清出一些不用的空間出來.
https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
2018年6月21日 星期四
2018年5月30日 星期三
MBR 轉換到 GPT 筆記
現在這篇筆記是寫給已經裝在 MBR partition 的 ubuntu linux distro 轉換到 GPT partition 的手法, 轉換的條件有幾個:
GPT partition 會使用頭尾 17KiB (33 sectors), 所以 34-2047 這段是空白沒有使用的. 過去 grub2 在 MBR 裡會把 2nd boot section 擺在 2-63 sectors 這段空間裡, 在 GPT 我就不知道它擺在哪, 總之我把這段空間整段抹掉拿來做 GPT ef00 partition 竟然是可以用的. 只能說 grub2 好厲害. 不過因為這段僅只有 1007KiB, 所以只能使用 FAT16 的格式.
#update190109: 只需要 1007KiB 大小的是比較舊的 grub, grub2 用的 efi 檔案總共有 4MiB 以上, 不能再使用這種方法安裝. 新版的 grub2 efi 好處是在 grub.cfg 裡就可以指定 disk uuid 可以隨時更改, 壞處是檔案變的很肥大...
而在 gdisk 裡操作切割 34-2047 這段, 要在 gdisk 下, 先切 "x" Expert command mode 下用 "l" (L) 將基本區塊指定為 1 (預設為 2048, 1MiB), 再切 "m" 回一般模式, 就可以手動分割出 34-2047 這段為一個 partition 出來. 設定好 partition type 為 ef00 後, 用 "s", 就可以自動排序成該有的先後順序.
假設目標硬碟為 /dev/sdX, EFI System partition (ef00) 為 /dev/sdX1, rootfs 為 /dev/sdX2, 工作目錄為 /tmp/rootfs, /dev/sdX1 記得要掛在 rootfs 的 boot/efi/ 下:
grub-install \
--recheck \
--force \
--target=x86_64-efi \
--bootloader-id=ubuntu \
--boot-directory=/tmp/rootfs/boot/ \
--efi-directory=/tmp/rootfs/boot/efi/ \
--modules="part_gpt ext2" \
/dev/sdX
mkdir -p /tmp/rootfs/boot/efi/EFI/BOOT
mv /tmp/rootfs/boot/efi/EFI/ubuntu/grubx64.efi /tmp/rootfs/efi/EFI/BOOT/bootx64.efi
update 20181218: 以上紅字為使用 ubuntu 版 amd64 grub2 binary 時 "必需" 字串與步驟. bootloader-id 為什麼非 ubuntu 不可這別問我, 我不知道. move 到 EFI/BOOT/bootx64.efi 前面有說, 也是必需, 否則一堆板子認不到.
- 建議 x86-64 的系統. 這是 ubuntu 官方文件這樣建議, 不是我寫的. 以我所知道從 2011 年 intel 開始大力推展 UEFI BIOS 以來, 64bit UEFI 也可以開 32bit boot-loader, 反過來不行, 所以很大多數的板子用的都是 64bit UEFI (可能有些 intel reference board 還在死命抗拒 x86-64 還在用 ia32 UEFI 那不在我們討論範圍內..), 所以我也是建議使用 x86-64 的系統.
- 磁碟的剩餘 sector 數必需大於 34, 因為 GPT partition 會有另一個備份 partition table 放在硬碟尾端 34 sectors 上, 所以轉換到 GPT 時需要保留. 在用 fdisk -l 看 MBR martition 硬碟時可以看到第一行硬碟機有多少 sectors 可用, 例如
- Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
- /dev/sdb2 59793408 1953521663 1893728256 903G 83 Linux
- 前者必需要比後者大最少 34. 一般來說較新的 distro fdisk 都會以 1MiB 當基本單位, 而硬碟機很少有可用空間是 1048576byte 整數倍的, 所以會碰上不能用的可能性實在不太高....
- ubuntu 準備兩個套件 grub-efi-amd64 grub-efi-amd64-bin
- UEFI 認得的 file system 種類. 我所知只有 FAT16, FAT32, NTFS, ext4不支援.
- GPT partition 編號要為 ef00 (EFI System). (ubuntu 官方文件提到如果是 MBR, 用的就是 0xef, 而且要設定為 bootable. 但我沒有實驗過在 UEFI 下使用 MBR).
- ps. ef02 為非必需.
- EFI System 的有效大小看使用的檔案系統, FAT16 可以 512KiB 起跳,
但 FAT32 最少要 33MiB (含) 起跳, 否則 BIOS 認不到. 在做 mkfs.vfat 前保守一點用 wipefs -fa 清掉這個 FAT partition 殘存的資料, 否則有機會造成即使空間足夠, format 成 FAT32 BIOS 一樣認不到. - 預設基本目錄為 EFI/BOOT/BOOTx64.efi, EFI 底下不是 BOOT 它認不到, BOOT 底下沒有 BOOTx64.efi 也認不到, 別問我為什麼我不知道. asus 是這樣, VM workstation 也是這樣.
GPT partition 會使用頭尾 17KiB (33 sectors), 所以 34-2047 這段是空白沒有使用的. 過去 grub2 在 MBR 裡會把 2nd boot section 擺在 2-63 sectors 這段空間裡, 在 GPT 我就不知道它擺在哪, 總之我把這段空間整段抹掉拿來做 GPT ef00 partition 竟然是可以用的. 只能說 grub2 好厲害. 不過因為這段僅只有 1007KiB, 所以只能使用 FAT16 的格式.
#update190109: 只需要 1007KiB 大小的是比較舊的 grub, grub2 用的 efi 檔案總共有 4MiB 以上, 不能再使用這種方法安裝. 新版的 grub2 efi 好處是在 grub.cfg 裡就可以指定 disk uuid 可以隨時更改, 壞處是檔案變的很肥大...
而在 gdisk 裡操作切割 34-2047 這段, 要在 gdisk 下, 先切 "x" Expert command mode 下用 "l" (L) 將基本區塊指定為 1 (預設為 2048, 1MiB), 再切 "m" 回一般模式, 就可以手動分割出 34-2047 這段為一個 partition 出來. 設定好 partition type 為 ef00 後, 用 "s", 就可以自動排序成該有的先後順序.
假設目標硬碟為 /dev/sdX, EFI System partition (ef00) 為 /dev/sdX1, rootfs 為 /dev/sdX2, 工作目錄為 /tmp/rootfs, /dev/sdX1 記得要掛在 rootfs 的 boot/efi/ 下:
- mount /dev/sdX2 /tmp/rootfs
- mkdir -p /tmp/rootfs/boot/efi
- mount /dev/sdX1 /tmp/rootfs/boot/efi
grub-install \
--recheck \
--force \
--target=x86_64-efi \
--bootloader-id=ubuntu \
--boot-directory=/tmp/rootfs/boot/ \
--efi-directory=/tmp/rootfs/boot/efi/ \
--modules="part_gpt ext2" \
/dev/sdX
mkdir -p /tmp/rootfs/boot/efi/EFI/BOOT
mv /tmp/rootfs/boot/efi/EFI/ubuntu/grubx64.efi /tmp/rootfs/efi/EFI/BOOT/bootx64.efi
update 20181218: 以上紅字為使用 ubuntu 版 amd64 grub2 binary 時 "必需" 字串與步驟. bootloader-id 為什麼非 ubuntu 不可這別問我, 我不知道. move 到 EFI/BOOT/bootx64.efi 前面有說, 也是必需, 否則一堆板子認不到.
2018年5月10日 星期四
`linux-update-symlinks` is not available.
一如 bug report 所說, 是 linux-base 這個套件有少東西, 須要升級. 但是沒有講要升到哪一版. 我測試的結果是必需要 4.5 (4.5ubuntu1)開始才有:
https://packages.ubuntu.com/bionic/linux-base
google 到的都是一堆廢話, 就是沒有寫怎麼解. 下載上面那個安裝包裡的東西再 dpkg -i 就可以了.
https://packages.ubuntu.com/bionic/linux-base
google 到的都是一堆廢話, 就是沒有寫怎麼解. 下載上面那個安裝包裡的東西再 dpkg -i 就可以了.
2018年4月27日 星期五
yocto rebuild package
rebuild 其實很簡單, -f -c clean 再 -f -c deploy (有的套件不支援) 或 -f -c compile 就好. 麻煩的是你要知道這套件叫什麼名字. 因為隨著引入的 meta 套件不同, 命名會有所不同.
例如在 error task log 裡有提到
qtquickcontrols2_git.bb
在 yocto 的套件命名規則裡, 底線 "_" 之後都是版本, 之前都是套件名稱, 所以特別把在這之前的名稱過濾出來即可:
bitbake qtquickcontrols2 -f -c clean;bitbake qtquickcontrols2 -f -c compile
多下一個 clean 會比較保險.
linux kernel 在 yocto 官方名稱記得是叫 linux-yocto, 所以像 intel 的 yocto bsp 重編 kernel 你就要下 bitbake linux-yocto -f -c deploy
例如在 error task log 裡有提到
qtquickcontrols2_git.bb
在 yocto 的套件命名規則裡, 底線 "_" 之後都是版本, 之前都是套件名稱, 所以特別把在這之前的名稱過濾出來即可:
bitbake qtquickcontrols2 -f -c clean;bitbake qtquickcontrols2 -f -c compile
多下一個 clean 會比較保險.
linux kernel 在 yocto 官方名稱記得是叫 linux-yocto, 所以像 intel 的 yocto bsp 重編 kernel 你就要下 bitbake linux-yocto -f -c deploy
2018年3月19日 星期一
android ignore imgdiff
when build system image (target command "systemimage") got the shit message:
"failed to break apart source image"
fuck it!
modify the code to ignore this idiot work:
"bootable/recovery/applypatch/imgdiff.cpp"
int main(int argc, char** argv) {
int zip_mode = 0;
+ return 0; //return "success" direct, don't do anything stupid.
...
}
I don't know why added garbage work here, may guess CPU toooo fast? fuck..
"failed to break apart source image"
fuck it!
modify the code to ignore this idiot work:
"bootable/recovery/applypatch/imgdiff.cpp"
int main(int argc, char** argv) {
int zip_mode = 0;
+ return 0; //return "success" direct, don't do anything stupid.
...
}
I don't know why added garbage work here, may guess CPU toooo fast? fuck..
2018年3月14日 星期三
wpa_supplicant assign MAC address
參考
這是指定 AP MAC address 的做法. 這種場合是你不能設定 AP 名稱, AP 的 2.4Ghz / 5Ghz 都用一樣的 SSID, 或你只需要連上某個特定的 AP 時, 就需要這樣做:
現在有 ".TPE-FGreeADWifi-Car" 這個車廂內專用 SSID 可用, 才解決這個問題.
這是指定 AP MAC address 的做法. 這種場合是你不能設定 AP 名稱, AP 的 2.4Ghz / 5Ghz 都用一樣的 SSID, 或你只需要連上某個特定的 AP 時, 就需要這樣做:
FILE /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
ap_scan=1
network={
bssid=00:50:17:31:1a:11
ssid="YourSSID"
psk="your-secret-key"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
group=CCMP TKIP
pairwise=CCMP TKIP
priority=5
}
題外話. 在這之前台北捷運無線網路不管是車廂內還是站內都用同一個 SSID, 變成座車時只要站內的信號比較強, android 內 wpa_supplicant 就會很雞婆的切換過去, 然後就不能上網了. wpa_supplicant 動作又慢, web browser 動作也慢, 手機 CPU 動作更慢, 等到認證可以連上網時車子已經離站了, 然後你又要再連線一次...現在有 ".TPE-FGreeADWifi-Car" 這個車廂內專用 SSID 可用, 才解決這個問題.
2018年3月10日 星期六
Windows 10 update
〔Win〕+〔R〕並輸入「gpedit.msc」後再按下〔確定〕鈕。 進入了「群組原則編輯器」畫面後,請展開左邊「電腦設定」→「系統管理範本」→「 Windows元件」→「Windows Update」,並點選兩下右邊的「設定自動更新」。 預設值是「尚未設定」,請點選「已啟用」後在選項上指定2或4
來源
Win+R -> gpedit.msc -> LocalComputerPolicy->ComputerConfiguration->AdministrativeTemplates-> WindowsComponents->WindowsUpdate->ConfigureAutomaticUpdates->Enable->Select 2
在噓你機器上有確定要手動按才會更新,暫時不會亂搞了。
update 2018/05/01: 功能更新 (RS4) 不會擋, 看來必需要有更強制的手段
來源
Win+R -> gpedit.msc -> LocalComputerPolicy->ComputerConfiguration->AdministrativeTemplates-> WindowsComponents->WindowsUpdate->ConfigureAutomaticUpdates->Enable->Select 2
在噓你機器上有確定要手動按才會更新,暫時不會亂搞了。
update 2018/05/01: 功能更新 (RS4) 不會擋, 看來必需要有更強制的手段
訂閱:
文章 (Atom)