:::

空間不足了!如何清理Crouton (Ubuntu)的儲存空間? / How to Free Up Space on Crouton (Ubuntu)

3-_Crouton (Ubuntu)的空間3.png

大家好,我是持續跟Chromebook奮鬥的布丁。我這臺在2018年購買的Chromebook只有32GB的儲存空間,這個限制使得在Chromebook上裝了些APP、甚至是使用crouton的時候,很容易就用盡Chromebook的儲存空間。Chromebook裡面管理Chrome OS的檔案比較容易,但是在crouton這個Ubuntu作業系統環境裡,要找出大型檔案和已經安裝的套件,就需要仰賴一些工具和指令列命令。接下來就讓我們來看看要怎麼在crouton裡面清出更多空間吧。


環境 / Environment

MVIMG_20190625_213632.jpg

我現在使用的Chromebook是ASUS Chromebook Flip C213NA,儲存空間是32GB EMMC。這個儲存空間對Windows使用者來說是不可思議的小,甚至比很多手機都還要小,不過這在很多中低階Chromebook中是很常見的儲存空間規格。

在一般只使用Chrome OS的Google Chrome時,32GB的空間遊刃有餘。如果要加上Android,只要APP不要裝佔空間的遊戲大作,空間還過得去。

Screenshot 2019-05-31 at 1.23.45 PM.png

但如果裝了crouton,在Chromebook上建構Ubuntu的Linux環境,還安裝了各種開發程式環境所需要工具,像是Node.js、Python、NetBeans之後,整個Chromebook的空間就只剩下不到2GB了。在空間不足的限制下,開發工作變得綁手綁腳。好幾次想要試著安裝個套件看能不能整合到系統中,很容易一不小心就讓整個Chromebook空間用盡、系統停擺,只能強迫關機再重新開機。

不能使用記憶卡作為儲存空間嗎? / Why not use memory card as storage?

2019-0625-090054.png

有些人可能會問說,不是有記憶卡插槽嗎?大部分Chromebook都支援MicroSD擴充,但必須注意的是,記憶卡空間跟系統所使用的儲存空間,兩者是不同的概念。一來是Chromebook的Chrome OS、Android、Crostini (Linux Beta)都是以內建儲存空間為主,不能將APP安裝到記憶卡上;二來是Chromebook在休眠時會切斷記憶卡讀卡機的電源,因此我們實際上不太能將系統核心檔案放在MicroSD記憶卡中,否則會造成系統因為讀取不到記憶卡的檔案而當機。

簡單來說,MicroSD記憶卡只能存放一些與系統運作無關的檔案。像是文件、音樂、影片,或是程式安裝檔和備份資料。但在開發的工作中,開發環境所需要的各種工具都是系統必備的元件,因此不管記憶卡空間再大也幫不上忙。

既然如此,那我們就好好珍惜這個32GB的空間限制,好好定期清理系統裡的多餘檔案吧。


找出佔用空間大型檔案:k4dirstat

在Linux中要找出大型檔案,許多人都使用的是指令列的du指令,作法請參考「Linux find largest file in directory recursively using find/du」或是「Linux如何找出佔用較大空間的檔案」這篇。但指令列實在是很難閱讀與管理,而且我的crouton本來就是Xfce桌面環境了,難道沒有圖形化的工具可以使用嗎?

_051.png

有的,那就是k4dirstat。他結合了檔案目錄的樹狀圖和佔用空間大小的視覺化地圖來呈現,是分析電腦各個目錄與檔案佔用空間大小的強力工具。

k4dirstat的操作邏輯跟Windows上的知名工具WinDirStat還蠻像的,這也是我在Windows上必裝的重要工具。如果想要認識WinDirStat的話,可以參考電腦玩物的介紹「圖形化顯示檔案空間佔用情形:WinDirStat」。

安裝 / Install

k4dirstat可以透過apt-get套件安裝工具來安裝:

sudo apt-get install k4dirstat -y

印象中好像沒有遭遇什麼特別問題,操作起來挺順利的。

操作 / Usage

k4dirstat_017.png

k4dirstat開啟畫面並沒有引導指引,開起來就是空白一片。首先我們要按下左上角的「Open」。

Open Directory...k4dirstat_019.png

再來是選擇要分析的資料夾路徑。一般來說,我會建議分析你可以控制的家目錄 (/home)。不過你也可以分析根目錄 ( / ) 來看看佔用整台電腦儲存空間的到底是那些資料夾。

k4dirstat_001.png

統計完成之後會呈現如上面這張圖。上半部是以樹狀圖來呈現各個目錄、檔案,並預設以佔用空間大小由大到小排序。下半部則是以地圖呈現各個目錄、檔案所佔用的檔案大小。每個方格都是一個檔案,越大的方格表示檔案大小越大。不同的方格顏色表示不同的檔案類型。綠色表示壓縮檔L;紫色表示執行檔(在Linux裡面,這是指擁有執行權限的檔案,而非Windows裡面的exe副檔名檔案);橙色表示是系統函式庫so檔案;黃色是Java函式庫jar檔案。同一個目錄底下的檔案會靠在一起成為臨近的方格。

2019-0625-090604.png

我們可以透過這兩種操作界面來找出佔用空間的目錄與檔案。最直覺的操作,就是先點選地圖裡面較大的方格。我點選了其中一個方格,上面的樹狀圖就會跳到該檔案的位置。從樹狀圖的檔案詳細資料中,我們可以發現這是netbean的log檔案,佔用空間高達317.3MB,而且檔案名稱還有「.old」字眼,這很有可能是我們可以選擇移除的檔案。事實上,我已經將NetBeans升級到11版,那舊版8.2的記錄檔案是可以移除了。感謝k4dirstat立刻幫我找出了沒清乾淨的大型檔案。

2019-0625-090704.png

另一個找出檔案的作法,就是直接從樹狀圖中佔用空間排行最高的資料夾開始看起。一層一層往下看,就可以發現我自己的家目錄中快取目錄(.cache)底下的netbeans目錄底下有好多大型檔案。這個是之前因為NetBeans無法正常開啟,我先將快取檔案換一個名字,讓NetBeans重新建立快取時所留下來的殘餘檔案。之前忘記清理了,剛好就讓k4dirstat把它找了出來。

2019-0625-090821.png

我們可以在k4dirstat裡面進行許多檔案操作,例如「Delete (to Trash Bin)」(刪除到回收筒)、「Open in Terminal」(在終端機中開啟)或是「Open a file browser」(在檔案瀏覽器裡面開啟)。

netbeans - File Manager_024.png

如果確認檔案已經不需要,那可以直接刪除到回收筒。如果是需要備份的資料,那可以用瀏覽器開啟,然後再用壓縮工具把需要備份的目錄保存到記憶卡中。整理完之後,就能清出更多Chromebook的儲存空間了。


移除已安裝的系統套件:apt / Find and uninstall packages: apt

tasksel-apt-get-failed.png

(圖片來源:Linuxsecrets)

crouton建構的Ubuntu環境中,套件管理使用的是APT工具。APT的意思是Advanced Packaging Tools,縮寫為APT。在Windows還要四處找尋安裝檔、手機上方便的APP Store或Google Play Store都還沒出現的時代,Linux使用者就已經能透過apt-get指令直接下載和安裝所需要的套件。舉例來說,要安裝向量繪圖工具Inkscape,指令就是:

 sudo apt-get install inkscape -y

不囉唆,指令一下,系統就自動開始下載、配置環境、安裝相依套件、完成安裝套件,稍等一下就會看到安裝完成了,超簡單。

然而,就是因為apt實在是太方便了,常常一不小心就會安裝大量套件,佔據電腦大量的儲存空間。雖然我們可以用上述的k4dirstat來找出佔用空間大小的檔案,不過比較好的作法,還是應該先移除不會使用的套件才是。

遺憾的是,crouton的Xfce並沒有內建圖形化的套件管理工具。我曾經安裝過Ubuntu的軟體中心software-centerGNOME軟體gnome-software或是Synaptic Package Manager,但常見的工具都沒辦法完整管理我用apt-get安裝的所有套件,所以這裡我就要回頭用最原始的指令列指令,以及另一個特別的圖形化工具Stacer,來找出我安裝過的各種套件。

找出已經安裝的套件:dpkg-query / List installed packages: dpkg-query

Back_049.png

我們大多知道移除安裝套件的指令是apt remove [package-name],但是要怎麼知道這個套件的名字呢?舉例來說,我想要移除剛剛安裝卻不能使用的套件「Synaptic Package Manager」,但是在應用程式選單(application launcher)中,它只會顯示「Synaptic Package Manager」,那顯然不是它的套件名稱。

要怎麼找出已經安裝的套件,我參考了「How to Show Installed Package Size on Ubuntu/Debian」這篇的作法,使用dpkg-query工具,並輸出成文件檔案,指令如下:

dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n > install-packages.txt

Terminal - (xenial)pudding@localhost_ __045.png

然後我們就可以用gedit編輯器來開啟它,指令如下:

gedit installed-packages.txt

dpkg-query-20190625.txt (_-) - gedit_046.png

該列表的第一欄是套件的檔案大小,第二欄是套件名稱。我們可以用gedit的搜尋功能找出可能是「Synaptic Package Manager」的套件名稱「synaptic」,這樣就知道要怎麼移除了。

2019-0625-091427.png

上述指令產生的已安裝套件列表是以檔案大小由小至大排序,所以列表最後的套件名稱就是佔據空間最多的套件。我的Chromebook裡面最大的是wps-office,還比第二名Google Chrome明顯要大的多,可是這些套件我都還要使用,所以也不能隨便移除啦。

搜尋套件名稱:Stacer / Package search and uninstall: Stacer

stacer-header.png

(圖片來源:STACER)

另一個好用的工具是圖形化介面Stacer。它是一個類似Windows的CCleaner的綜合工具,其中一個功能就是套件反安裝。

Terminal - (xenial)pudding@localhost_ __061.png

因為我們要管理套件,需要比較高的權限,所以我們不能直接從應用程式選單中開啟Stacer,而必須要從指令列以sudo開啟stacer,指令如下:

sudo stacer

2019-0625-091539.png

Stacer開啟的時候第一眼會呈現的是系統儀表板。我們從左邊的列表進入套件移除工具 Uninstaller。

Stacer_062.png

進入套件移除工具後,可以從右上角的搜尋工具來找出套件名稱。像是我輸入了「syna」之後,Stacer就幫我列出名稱涵蓋「syna」的套件,其中一個就是我想要移除的「synaptic」套件。

移除套件:apt / Remove package: apt

有了套件名稱後,我們就能用apt指令移除它:

sudo apt remove [package-name] -y

如果我們要移除的套件名稱為「synaptic」,那指令就是:

sudo apt remove synaptic -y

Terminal - (xenial)pudding@localhost_ __053.png

這樣就移除完成了。

移除套件:Stacer / Remove package: Stacer

2019-0625-092847.png

當然,我們也可以直接用Stacer的套件移除工具來移除套件。我們一樣是在套件移除工具中,我們先選擇套件,然後按下下面的反安裝選擇的套件 Uninstall Selected。

Stacer_063.png

然後Stacer就會幫你把套件移除了,非常簡單。


清理暫存檔案:Stacer / System cleaner: Stacer

Stacer還有一個類似CCleaner的功能,那就是清理系統的暫存空間。因為這個操作也需要比較高的權限,所以需要搭配sudo指令來開啟Stacer,指令如下:

sudo stacer

2019-0625-091811.png

我們可以從左邊的列表進入系統清理器 System Cleaner。

2019-0625-091910.png

接著勾選下面到「Select All」,然後按下放大鏡的圖示。

2019-0625-091946.png

Stacer找出了許多可以清理的暫存檔案,總共大小快要2GB了。讓我們勾選「Select All」,然後再按下掃把的圖示。

Stacer_058.png

這樣就清理完囉。

Stacer_060.png

回到Stacer的儀表板 Dashboard,你可以看到DISK的圖表變成了「19.4 GiB / 24.5 GiB」,剩餘空間大概有5GB。

Screenshot 2019-06-25 at 8.23.20 PM.png

再切換到Chrome OS,儲存空間則是還有3.8GB。這個數字應該會比crouton的Stacer還要準確。


結語 / In closing

這篇教大家在crouton環境裡面使用各種工具來清理Chromebook不大的儲存空間。k4dirstat可以找出大型的檔案和目錄,dpkg-query可以列出龐大的已安裝套件,Stacer可以移除套件和清除系統暫存檔。這套方法不僅可用於Chromebook的crouton中,也能夠在其他Ubuntu的作業系統裡面使用。

MVIMG_20190625_205714.jpg

一天又平安的過去了,感謝這些工具的努力,我的Chromebook又有一些喘息的空間了。

閒聊 / Off-topic

2019-06-25_214239.png

自從Google關閉圖片上傳API,導致Open Live Writer沒辦法正常使用之後,我後來就投入了開發替代方案Blogger Editor上。現在我在寫的每一篇,都是一邊改進它的各種bug,然後在撰寫過程中發掘更多bug。

要好好開發一個編輯器真的不太容易。在這次Blogger Editor專案中我使用的是summernote所見即所得編輯器,這是一種基於HTML contenteditable屬性的編輯器。summernote的確提供了許多好用的功能,但是受限於它本身是一種contenteditable的限制,很多細緻的操作都會出現意料之外的結果。

為此,我改進了很多contenteditable本身的問題:

  • 插入節點時,捲軸位置跳掉的問題。
  • 使用enter換行時,會產生額外格式屬性的問題。

再加入了一些summernote本身還沒做好的功能:

  • 用拖曳和貼上的方式上傳圖片。
  • 插入多節點的HTML程式碼,而非受限於只能是一個節點。
  • 自動補完的提示功能。這個真的很好用啊。

接著我也讓Blogger Editor可以用多種形式運作,特別是能透過Electron而變成獨立的APP,這樣就不需要透過其他網頁瀏覽器,直接就能開啟使用。

這篇這樣寫下來,更多問題又加入到Issues列表中。雖然看起來問題很多,但到目前為止,我覺得寫起來已經比Open Live Writer還要順手了。這真的是自己的工具自己做啊。

那這篇寫完之後,我會先修理這些bug,然後再來寫下一篇吧。


那麼這次在Chromebook的crouton中清理儲存空間的教學就到這裡了。你也是Linux的使用者嗎?你平常都是怎麼清理儲存空間的呢?有沒有其他好用的方法或工具呢?歡迎在下面的留言處跟我們分享你的想法。大家的意見是我繼續分享的動力喔!如果你覺得我這篇閒聊算是有趣的話,請幫我在AddThis分享工具按讚、將這篇分享到Facebook等社群媒體吧!感謝你的耐心閱讀,我是布丁,讓我們下一篇見。