縮小 Ubuntu 的 Hyper-V VM 動態 VHD 檔案

之前有紀錄過,微軟有提供「Optimize-VHD」這個 Hyper-V 的 PowerShell cmdlet(官方文件),可以用來透過釋出沒有用到的空間來最佳化動態擴充的 VHDX 的大小。

而當最近當發現自己用 Hyper-V 架設的 GitLab 的 VHDX 檔案所占用的空間越來越大、遠遠超過實際的內容(實際檔案只有不到 100GB,但是檔案卻有 640GB…),想透過「Optimize-VHD」來縮小檔案的時候,卻發現它幾乎沒有用!?

後來查了一下,才發現微軟的 Optimize-VHD 主要應該還是以對應 Windows 的 NTFS 為主,對於 Linux 的檔案系統看來是沒辦法很好地去偵測檔案裡的那些區塊並沒有實際被用到、所以基本上無法有效地縮小檔案。

閱讀更多»

Ubuntu 的 Docker 無法使用的問題

前幾天,手邊幾台 Ubuntu 20.04 的電腦似乎是在 apt 更新完後,就開始出現 docker 容器無法正確執行的問題了?

錯誤訊息基本上是:

OCI runtime create failed: container_linux.go:348: 
starting container process caused: error adding seccomp filter rule for syscall clone3: permission denied: unknown

這個問題基本上應該不是個案,在網路上也可以找到相關的討論。

閱讀更多»

PHP 奇怪的 session_start 失敗問題:UTF-8 BOM

最近在弄新的系統的時候,同事在 Windows 上寫的 PHP 程式在要搬到 PHP Apache Docker 的時候,出現了一個奇怪的問題;那就是它會出現下面的錯誤:

Warning: session_start(): Cannot start session when headers already sent in 
XXX.php on line X

這個錯誤還算滿明確的,基本上就是在呼叫 session_start() 這個 PHP 的函式之前,就先粗出了其他的內容所造成的。

但是仔細檢查過檔案後,卻發現其實根本沒有輸出任何東西啊?

閱讀更多»

Ubuntu 16 遇到的 g++ 5.x ABI 不相容問題

Heresy 目前開發跨平台的 C++ 程式的時候,主要是透過 Windows 10 的「Bash on Ubuntu on Windows」這個 Windows Subsystem for Linux(WSL)來進行操作的。

在微軟剛貼出的時候,他的 Ubunutu 版本還是 14,而後來在微軟推出 Creators Update (1703) 的時候,也把 Ubuntu 的版本升級到 16.04 了~而在 Ubuntu 系統版本升級的同時,系統預設使用的編譯器也由 g++ 4.x 更新到 g++ 5.x 了。

而也因為這樣,當 Heresy 要做 Linux 環境的建置測試的時候,也碰到了一些問題,這邊就稍微紀錄一下了。

首先,會有問題的主要原因,是 GCC5.1 在發布的同時,也推出了新的 libstdc++;而這個 C++ 的標準函式庫為了符合 C++11 的標準,重新實作了 std::stringstd::list;而這兩個類別由於遵循了新的規範(禁止 Copy-On-Write),所以變得和舊版的函式庫不相容。

為了避免混亂,gcc 5.1 修改了對應的 ABI(Application binary interface),像是 std::list<int> 實際上會是定義成 std::__cxx11::list<int> 的形式;基本上,就是有部分標準函式庫的東西的 namespace 會從 std 變成 std::__cxx11 了。

閱讀更多»

Bash on Ubuntu on Windows 的簡單使用

前一陣子,Heresy 有寫了一篇《Windows 10 將可以跑 Linux 的 Bash shell 和 Ubuntu 的程式了》來介紹微軟即將在新版 Windows 10 內做的一個往 Linux 方向靠攏的功能了~

而雖然這項功能應該是要等到夏天的 Windows 10 年度更新才會有,不過目前在 Windows 10 Insider Preview 的 Fast Ring 最新的預覽版、Build 14316 裡面(官方介紹),就可以搶先體驗這個功能了!Heresy 看到之後,就立刻把筆記電腦切到 Insider Preview 了、準備試玩了~ XD

不過很遺憾的是,在把 Windows 10 從正式版切換到 Insider Preview 後,並沒有辦法馬上偵測到預覽版的更新…Heresy 甚至去下載了比較舊的預覽版 ISO、透過 ISO 強制更新到 Insider Preview 的版本,Windows Update 還是沒辦法偵測到更新… orz
後來是電腦又放了幾天,他才能抓到 Build 14316、並開始更新。總覺得,微軟這方面做的還真糟糕啊…

閱讀更多»

Windows 10 將可以跑 Linux 的 Bash shell 和 Ubuntu 的程式了

這應該是今年微軟 Build 大會,最讓人震驚的消息了吧?有興趣的人,可以參考《Developers can run Bash Shell and user-mode Ubuntu Linux binaries on Windows 10》一文。

基本上,這項功能預計會在 Windows 10 的年度更新(Anniversary update、預計是今年夏天發布)的時候出現,他會在 Windows 10 中建立一個 Ubuntu 的 Linux 子系統;而之後就可以直接在 Windows 10 的環境下,執行 Ubuntu 的 bash shell 了!

而更重要的是,他會有一個完整的「Ubuntu user space」,Ubuntu 上的 user-mode 的應用程式,也將可以直接在這個環境下運作!甚至,不需要重新編譯過,只需要直接在這個環境中,使用 apt 這個套件管理工具,來下載各式各樣的應用~

閱讀更多»