本教程討論了 Linux 中交換文件的概念,爲何使用它以及它相對於傳統交換分區的優點。你將學習如何建立交換文件和調整其大小。 |
什麼是 Linux 的交換文件?linux
交換文件容許 Linux 將磁盤空間模擬爲內存。當你的系統開始耗盡內存時,它會使用交換空間將內存的一些內容交換到磁盤空間上。這樣釋放了內存,爲更重要的進程服務。當內存再次空閒時,它會從磁盤交換回數據。我建議閱讀這篇文章,瞭解 Linux 上的交換空間的更多內容。安全
傳統上,交換空間是磁盤上的一個獨立分區。安裝 Linux 時,只需建立一個單獨的分區進行交換。可是這種趨勢在最近幾年發生了變化。服務器
使用交換文件,你再也不須要單獨的分區。你會根目錄下建立一個文件,並告訴你的系統將其用做交換空間就好了。app
使用專用的交換分區,在許多狀況下,調整交換空間的大小是一個可怕而不可能的任務。可是有了交換文件,你能夠隨意調整它們的大小。編輯器
最新版本的 Ubuntu 和其餘一些 Linux 發行版已經開始 默認使用交換文件。甚至若是你沒有建立交換分區,Ubuntu 也會本身建立一個 1GB 左右的交換文件。ide
讓咱們看看交換文件的更多信息。工具
檢查 Linux 的交換空間性能
在你開始添加交換空間以前,最好檢查一下你的系統中是否已經有了交換空間。學習
你能夠用Linux 上的 free 命令檢查它。就我而言,個人戴爾 XPS有 14GB 的交換容量。spa
free -h total used free shared buff/cache available Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G Swap: 14G 0B 14G
free 命令給出了交換空間的大小,但它並無告訴你它是真實的交換分區仍是交換文件。swapon 命令在這方面會更好。
swapon --show NAME TYPE SIZE USED PRIO /dev/nvme0n1p4 partition 14.9G 0B -2
如你所見,我有 14.9GB 的交換空間,它在一個單獨的分區上。若是是交換文件,類型應該是 file 而不是 partition。
swapon --show NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -2
若是你的系統上沒有交換空間,它應該顯示以下內容:
free -h total used free shared buff/cache available Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G Swap: 0B 0B 0B
而 swapon 命令不會顯示任何輸出。
在 Linux 上建立交換文件
若是你的系統沒有交換空間,或者你認爲交換空間不足,你能夠在 Linux 上建立交換文件。你也能夠建立多個交換文件。
讓咱們看看如何在 Linux 上建立交換文件。我在本教程中使用 Ubuntu 18.04,但它也應該適用於其餘 Linux 發行版本。
步驟 1:建立一個新的交換文件
首先,建立一個具備所需交換空間大小的文件。假設我想給個人系統增長 1GB 的交換空間。使用fallocate 命令建立大小爲 1GB 的文件。
sudo fallocate -l 1G /swapfile
建議只容許 root 用戶讀寫該交換文件。當你嘗試將此文件用於交換區域時,你甚至會看到相似「不安全權限 0644,建議 0600」的警告。
sudo chmod 600 /swapfile
請注意,交換文件的名稱能夠是任意的。若是你須要多個交換空間,你能夠給它任何合適的名稱,如 swap_file_一、swap_file_2 等。它們只是一個預約義大小的文件。
步驟 2:將新文件標記爲交換空間
你須要告訴 Linux 系統該文件將被用做交換空間。你能夠用 mkswap 工具作到這一點。
sudo mkswap /swapfile
你應該會看到這樣的輸出:
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=7e1faacb-ea93-4c49-a53d-fb40f3ce016a
步驟 3:啓用交換文件
如今,你的系統知道文件 swapfile 能夠用做交換空間。可是尚未完成。你須要啓用該交換文件,以便系統能夠開始使用該文件做爲交換。
sudo swapon /swapfile
如今,若是你檢查交換空間,你應該會看到你的 Linux 系統會識別並使用它做爲交換空間:
swapon --show NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2
步驟 4:讓改變持久化
迄今爲止你所作的一切都是暫時的。從新啓動系統,全部更改都將消失。
你能夠經過將新建立的交換文件添加到 /etc/fstab 文件來使更改持久化。
對 /etc/fstab 文件進行任何更改以前,最好先進行備份。
sudo cp /etc/fstab /etc/fstab.back
如今將如下行添加到 /etc/fstab 文件的末尾:
/swapfile none swap sw 0 0
你可使用命令行文本編輯器手動操做,或者使用如下命令:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
如今一切都準備好了。即便在從新啓動你的 Linux 系統後,你的交換文件也會被使用。
調整 swappiness 參數
swappiness 參數決定了交換空間的使用頻率。swappiness 值的範圍從 0 到 100。較高的值意味着交換空間將被更頻繁地使用。
Ubuntu 桌面的默認的 swappiness 是 60,而服務器的默認 swappiness 是 1。你可使用如下命令檢查 swappiness:
cat /proc/sys/vm/swappiness
爲何服務器應該使用低的 swappiness 值?由於交換空間比內存慢,爲了得到更好的性能,應該儘量多地使用內存。在服務器上,性能因素相當重要,所以 swappiness 應該儘量低。
你可使用如下系統命令動態更改 swappiness:
sudo sysctl vm.swappiness=25
這種改變只是暫時的。若是要使其永久化,能夠編輯 /etc/sysctl.conf 文件,並在文件末尾添加swappiness 值:
vm.swappiness=25
在 Linux 上調整交換空間的大小
在 Linux 上有幾種方法能夠調整交換空間的大小。可是在你看到這一點以前,你應該瞭解一些關於它的事情。
當你要求系統中止將交換文件用於交換空間時,它會將全部數據(確切地說是內存頁)傳輸回內存。因此你應該有足夠的空閒內存,而後再中止交換。
這就是爲何建立和啓用另外一個臨時交換文件是一個好的作法的緣由。這樣,當你關閉原來的交換空間時,你的系統將使用臨時交換文件。如今你能夠調整原來的交換空間的大小。你能夠手動刪除臨時交換文件或留在那裏,下次啓動時會自動刪除(LCTT 譯註:存疑?)。
若是你有足夠的可用內存或者建立了臨時交換空間,那就關閉你原來的交換文件。
sudo swapoff /swapfile
如今你可使用 fallocate 命令來更改文件的大小。比方說,你將其大小更改成 2GB:
sudo fallocate -l 2G /swapfile
如今再次將文件標記爲交換空間:
sudo mkswap /swapfile
並再次啓用交換文件:
sudo swapon /swapfile
你也能夠選擇同時擁有多個交換文件。
刪除 Linux 中的交換文件
你可能有不在 Linux 上使用交換文件的緣由。若是你想刪除它,該過程相似於你剛纔看到的調整交換大小的過程。
首先,確保你有足夠的空閒內存。如今關閉交換文件:
sudo swapoff /swapfile
下一步是從 /etc/fstab 文件中刪除相應的條目。
最後,你能夠刪除該文件來釋放空間:
sudo rm /swapfile
你用了交換空間了嗎?
我想你如今已經很好地理解了 Linux 中的交換文件概念。如今,你能夠根據須要輕鬆建立交換文件或調整它們的大小。
若是你對這個話題有什麼要補充的或者有任何疑問,請在下面留下評論。