2026年8月9日 星期日

我的分區閒聊,受夠了Windows和Linux互通檔案系統。還有其他閒聊。

  隨著上一篇〈Btrfs修改子卷的簡單記錄以及相關的其他閒聊(UFW、Debian Testing……)〉,經過這一年半來的某一分區的保留下來,我發現魚和熊掌不能兼得,我想要找一個好的檔案系統讓WIndows、Linux可以互相存取,又可以用來備份我的檔案,但經過這一段時間的嘗試,我發現不必要也不值得了。今天就來聊聊我為何覺得不必要,以及我做了甚麼樣的嘗試,最後是發表一些其他閒聊。 

我原本的分區方案 

  簡單來說,128GB給Windows、150GB給Linux,剩下的就不使用(作為彈性運用)。具體如下: 

  • 500GB的NVMe SSD筆電硬碟 
    • 0.5GB的ESP:檔案系統是vfat,作為UEFI開機使用 
    • 16MB的MSR:微軟的保留空間,為歷史遺留等因素的保留分區 
    • 128GB的Windows 11系統分區:WIndows 11的主分區 
    • 45GB的交換分區:作為Windows和Linux互通的緩衝分區,這正是我硬碟分區的一根刺 
    • 1GB的RE分區:Windows的修復分區,實際上也沒什麼檔案 
    • 2GB的boot分區:以免少數系統的GRUB無法引導Btrfs、LVM所保留的,算是為了相容性 
    • 100GB的Linux的根分區:是LVM或是Btrfs 
    • ~224GB的剩餘:未配置的空白分區 

我的想法很簡單,Windows不常用,預裝的放前面,剩下的拿來用Linux,但我又曾妄想三系統(或是更多系統)的電腦,或是找到兩全其美的做法分割一個分區來備份、互通系統存取的資料分區。 

我考慮過的方案一——WinBtrfs 

  得益於GitHub有一個WinBtrfs這個開源項目,我於是去嘗試了下Windows讀取Btrfs分區(參考Ivon大大的這一篇〈Windows系統如何掛載Linux的BTRFS硬碟:使用WinBTRFS 〉),不過呢,無法掛載分區,因為我的電腦有打開安全啟動,因此要參考官方GitHub的做法,要在登錄檔的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy新增一個DWORD叫做UpgradedSystem,並且將UpgradedSystem設為1,電腦重啟即可。 

  重啟後,我的Windows正確的掛載並識別到Btrfs分區,看起來一切很美好,我也打算將分區都弄成Btrfs,讓Windows存取Btrfs即可,直到我點進去我的家目錄。我進入家目錄發現內容是空的,我的/var/log、/var/cache也是空的,我發現除了根目錄的@子卷有掛載,其他的子卷(像是@home、@log、@cache)都沒有被掛載上去,似乎一次只能掛載一個預設的子卷,而GitHub的官方說明文件並沒有說明怎麽掛載其他的子卷上去。 

  解決的方法有兩個,先說第一個。既然一次只能掛載一個子卷,且只能掛載預設的子卷,那麼我將我想要掛載的一個子卷設為預設不就好了?這其實也不是不行,因為我只有一個資料儲存子卷要掛載(大概是先如此),暫時也不會考慮到掛載兩個以上的子卷。但我覺得這有些撿了芝麻掉了西瓜,預設的子卷是給電腦系統引導時倘若出現一些問題不知道要掛載那一個子卷,那就掛載預設的子卷,從系統穩定性、未雨綢繆的角度來說,我當然是預設設為@,更何況,有些子卷是有層級順序的(level值),隨意設定這些預設子卷而沒有考慮到層級順序也是有可能埋下隱患(在容量配額容易會出現混亂。推薦去看Arch Wiki關於容量配額一節)。 

  我嘗試去尋找第二個解決方案,是來自Reddit論壇的一種解法(參考這篇:〈What are your WinBTRFS mount options? .... uh and where are they?〉),我嘗試在登錄檔的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\btrfs新增一個叫做subvol的string值,設為subvolid=5,重啟還是沒用,搗鼓了一番還是放棄了。 

  結論,我放棄了WinBtrfs這個方案來讓Windows和Linux檔案系統可以互通來存取文件的方式。 

我考慮過的方案二——exchanger分區 

  我建立了一個叫做「exchanger」的分區,方便我要是切換到WIndows時,我可以打開文件來編輯。我舉例來說,我先是用Linux製作我的報告,但我發現我需要從Tracker或是Arduino提取實驗數據,那麼我需要先切回去Windows來提取數據,將數據匯到我的實驗數據的試算表,用完後我會再回到Linux完成我後續的文件編輯,此時實驗數據相關的文件我會放在exchanger分區來讓兩個系統共用。 

  這裡就可以再想一個問題,我為何不直接在Linux裡面打開我的Windows的分區?主要是我不想要觸發WIndows的安全機制,倘若WIndows的C槽出現不完整的寫入,可能導致WIndows損毀或是觸發分區的加密機制使我不方便在Linux下掛載Windows分區,再換個角度去想,我也不喜歡在不確定是否完整掛載好的情況下掛載系統的分區(Linux也是,我是會確認好風險以及操作後再掛載Linux的分區,一般來說是會chroot來修改系統的文件)。 

  後來我發現用NTFS作為exchanger的檔案系統、作為互通的分區是風險最小且最成熟的方案,但為何我要遷就於一個不開放的系統、一個不開放的檔案系統?我是個會去Arch Linux參考教學修改WIndows的登錄檔來讓Windows適應Linux的硬體時間的策略,我覺得要是有轉寰餘地,我想要讓Windows遷就Linux的檔案系統。 

  你或許還會說,不是有exFAT嗎?但這個不是日誌式檔案系統,萬一在瞬間斷電等不可控的情況發生,我的資料損壞的風險比日誌式檔案系統還要大一些,暫時不考慮。 

什麼契機使我合併分區,不做互通的分區 

  這次的契機有兩個,一是領悟,二是Btrfs。 

  先說說「領悟」(辛曉琪的這一首還真的不錯),這真的很痛,我因為搬移檔案、修改分區、更換檔案系統導致我割捨了一些檔案(主要是照片),我沒有方便的獨立硬碟來存放資料,再加上我曾有錯誤的操作丟了一些檔案(至少不是重要資料)。這使我下定決心要趕快找出定型的方案。而截至目前,「Linux是我的絕對主力」這句話我終於喊得出來了,我一個切去Windows做正事的次數不到五次,切過去只是更新系統、軟體、簡單維護,因此我似乎也可以不用太糾結兩個系統互通、共享資料? 

  另一個契機是Btrfs,我發現「共享池」這個概念我很喜歡,我是個會手動分配掛載點的用戶,每次分配掛載點都要決定容量、檔案系統,但用了Btrfs,我只要管理好子卷就好了(當然我可以用LVM的簡單卷,設定分區大小就會類似設定配額一樣的彈性,只不過我切到Btrfs所以沒有繼續嘗試了)。而LVM可以做到類似的要求,但實際上LVM還是會有區塊容量的概念比Btrfs強烈(至少我用Btrfs沒在配額)。 

  關於檔案系統,我推薦可以看看YouTube的Houge Langley的頻道,有不少實踐案例(Linux頭腦風暴系列),我提出幾個我看過的 

  我後來是選擇在Linux下面掛載Windows的系統分區,將必要在Windows處理的文件丟進去,並且確保我有正確卸載分區(還有要先記得關掉「快速啟動」),在不然就把檔案丟到隨身碟,切過去讀取就好了。看來剩下的就是合併分區,並且安置好資料。 

  我因為有過一次經驗,我使用Live CD提供的GParted將分區做搬移,使得放資料、空白的分區挪到同一個區塊,那時我無視GParted的警告,直接搬移,結果Windows掛了,因此我對於不連續的空白分區的執念就沒了。 

  我先是將後面200多GB的空間全部劃給Linux的根分區,檔案系統是Btrfs;再把資料搬到Linux的根分區,刪掉exchanger分區,將exchanger的空白分區全部劃給Windows,變成下面的配置: 

  • 500GB的NVMe SSD筆電硬碟 
    • 0.5GB的ESP:檔案系統是vfat,作為UEFI開機使用 
    • 16MB的MSR:微軟的保留空間,為歷史遺留等因素的保留分區 
    • 173GB的Windows 11系統分區:WIndows 11的主分區 
    • 1GB的RE分區:Windows的修復分區,實際上也沒什麼檔案 
    • 2GB的boot分區:以免少數系統的GRUB無法引導Btrfs、LVM所保留的,算是為了相容性 
    • ~324GB的Linux的根分區:是Btrfs的Linux根分區(為了讀寫壽命和相容性,Btrfs我是用relatime而不是更加激進的noatime) 
      • /:掛載到@子卷 
      • /home:掛載到@home子卷 
      • /var/log:掛載到@log子卷,關掉寫時複製 
      • /var/cache:掛載到@cache子卷,關掉寫時複製 
      • /mnt/data:掛載到@data子卷,開啟較高倍率的壓縮(使用zstd的level 6的透明壓縮,其他子卷是level 3),用來存放資料 

  你要是看完我的Btrfs的分區,你或許會好奇,我為何將存放資料的子卷(@data)掛載到/mnt下面(掛載點差別,我推薦看Ivon大大的:〈要用/mnt還是/media?Linux自動掛載硬碟建議的路徑〉)?media目錄是專門掛載可移除裝置,很顯然我的這個子卷不是一個可移除裝置,因此我選擇掛載到mnt下面。我知道有其他網友是直接在根目錄下面直接掛載(形成/data目錄),但我實在不大喜歡,因為這不是這個系統自帶的目錄,掛載到家目錄也有些奇怪,因為這個data子卷我本來就希望要獨立於家目錄,我希望我的系統的家目錄是可以丟棄的狀態,要是掛載在家目錄下面,那我就不要獨立一個@data子卷就好了?我來簡單分享怎麽建立子卷到掛載子卷的步驟: 

  1. 建立子卷
    sudo btrfs su cr /@data 
  2. 在/mnt下面建立掛載點data目錄
    sudo mkdir -p /mnt/data 
  3. 將整個btrfs掛載起來,修改@data子卷的層級,方便後續的掛載
    $ sudo mkdir -p /mnt/btrfs-root
    sudo mount -o subvolid=5 /dev/nvme0n1p7 /mnt/btrfs-root
    sudo mv /mnt/btrfs-root/@/@data /mnt/btrfs-root/@data
    $ sudo umount /mnt/btrfs-root 
  4. 編輯/etc/fstab
    sudo nano /etc/fstab 
  5. 插入下列字串後保存並退出nano編輯器
    UUID="你的UUID" /mnt/data       btrfs   defaults,relatime,compress=zstd:6,nofail,subvol=@data        0       0 
  6. 執行一下reload命令,先讓系統重新抓取/etc下的配置文件
    sudo systemctl daemon-reload 
  7. 執行掛載命令,這一個命令會將fstab文件的所有掛載點掛載上去
    sudo mount -a 
  8. 修改權限,讓一般使用者可以編輯這個子卷、掛載點,而使之不需要root權限修改目錄
    $ sudo chown -R $USER:$USER /mnt/data 
  9. 建立軟連結,來讓家目錄可以有一個類似任意們的入口
    ln -s /mnt/data ~/Data 

部落格文章的籌劃——怎麽實現部落格上的動態 

  我想要找一個可以放我隨筆的地方,最好是要有時間戳。總不能夠將每一篇小札記作為一篇獨立的文章發佈,我也不喜歡在Facebook寫這麼多流水帳,我覺得那只會困擾我Facebook上的好友。我發現Blogger有Pages這個功能,這可以發佈靜態網頁、沒有發佈時間、沒有文章分類標籤等功能,主要是用來放置「關於我」之類不太會時效變動的文章,我覺得這或許是一個好機會,用這種方式還不會洗版到我的首頁文章。我知道也可以用Mastodon之類的來專門放我的小札記,但我目前不想再多註冊平臺也思考、嘗試在這個部落格平臺多些功能。 

  我之所以沒有像其他部落客那樣,用GitHub之類的倉庫來生成靜態網頁,主要是我懶惰(我對於前端還真的一竅不通),圖庫可能需要外掛,因此我選擇繼續留在Blogger,另外是我目前沒有買自己域名的打算(每年的支出也是值得考慮的,如果我可以用部落格致富,我再考慮考慮)。知道一些部落客搬家(例如小白Niugnep),從GitHub搬到codeberg,看來使用開源託管平臺也是有一定的推力,我也就更加決定繼續留在Blogger就好了。 

  我最近才知道Blogger可以用電子郵件寄信投稿文章,看來這或許也是實現動態的好機會? 

最近努力注銷用不到的雲端服務(小米帳號、Bilibili) 

  我知道一個概念:「如果使用者不付費使用商業公司的產品,那麼你會是商業公司的一個商品。」這概念有些殘酷,但又寫實,因此我花了些時間儘量注銷用不到的服務,只保留用得到的服務,像是我註銷了微軟帳號、小米帳號、Bilibili等網頁服務,主要就保留Google(想到下學期可能會因為上課而需要註冊學校的微軟帳號就覺得有些反感)。 

  值得一提的是我為何會注銷Bilibili帳號。我覺得最近大陸的實名制有些強迫,我覺得我給了電子郵件信箱這個資料就足夠敏感了,想不到想要使用好完整的免費功能需要實名制,要電話號碼、身份證等個資,而且最近我的Bilibili帳號不能再關注新的up主,up主的關注數量進入只可以少不可以多的階段。這使我重新反思,我是否還需要去B站看影片?我覺得以中文內容來說,B站可以看到比較多電腦相關的折騰(當然我可以去看英文區的頻道,只是我懶罷了),加上註冊後才可以看1080P影片,因此我決定註冊B站來看影片,現在這個推力太大了,我決定留守在YouTube(有一說一,中文區我想看的題材在YT上沒有Bilibili的豐富)。 

沒有留言:

張貼留言