Linux虛擬記憶體是什麼
虛擬記憶體是現代作業系統的基礎之一,但通常情況下,除非您遇到問題,否則您不會真正考慮它。 Linux 發行版要求您在安裝期間設定虛擬記憶體空間(交換分割區),但大多數初學者並不知道這有多大用處。
這是您需要了解的有關Linux 上的虛擬記憶體的所有資訊。
建議: 修復Windows上Operation Could Not Be Completed錯誤0x00000709
什麼是Linux虛擬記憶體
虛擬記憶體是一種表示您的記憶體的方式,它是從您機器上的實體記憶體中抽像出來的。它利用您的 RAM 和儲存空間,無論是在傳統硬碟還是 SSD 上。
在 Linux 中,這是在核心和硬體層級完成的。 CPU 有一個稱為記憶體管理單元 (MMU) 的硬件,它將實體記憶體位址轉換為虛擬記憶體位址。這些位址與它們在機器上的物理位置無關。這些位址空間被稱為“頁面”,它們可能位於 RAM 中,也可能位於您的硬碟或 SSD 中。作業系統將這些位址視為一個大記憶體池,稱為「位址空間」。
虛擬記憶體利用了這樣一個事實,即理論上並非所有正在使用的記憶體都一直在使用。記憶體中的程式被分解成頁面,核心認為不必要的部分被「換出」或移動到硬碟。當需要它們時,可以將它們「換入」或帶回 RAM。
磁碟機上用於虛擬記憶體的空間稱為「後備儲存」或「交換空間」。在 Windows 世界中,它通常被實作為一個文件,稱為「交換文件」。在 Linux 中也可以這樣做,但使用專用磁碟分割區更為常見。
Linux 上的交換檔案通常保留給最小系統或嵌入式系統,後者通常在完全沒有虛擬記憶體的情況下運行,因為嵌入式作業系統必須很小。
虛擬記憶體的結果是,可以透過使用比機器中的實體 RAM 更多的記憶體來運行大型程序,類似於信用卡可以讓您以比銀行帳戶中更多的錢進行大宗購買。就像信用卡一樣,虛擬內存在您需要時很有用,但您不想過度使用它。
虛擬記憶體還允許開發人員創建應用程序,而不必知道電腦的記憶體是如何組織的。
歷史上虛擬記憶體的主要缺點是硬碟比 RAM 慢。如果一台機器沒有足夠的 RAM,系統可以無休止地交換頁面,這個過程被稱為「抖動」。在具有更多 RAM 和更快 SSD 取代機械硬碟的現代 PC 上,這不是問題,但仍然需要注意。
Linux 交換分區
如前所述,在 Linux 上設定虛擬記憶體的常用方法是使用專用磁碟分割區。安裝實用程式將檢查您的硬體並提出一個包含交換分割區的分割區方案。
您也可以在安裝後新增交換分割區。如果要為現有磁碟機新增分割區,則必須使用 GParted 等非破壞性分割工具。確保您已選擇“Linux swap”作為分割區的檔案系統。
在重新分割磁碟機之前備份重要資料。
建立分割區後,使用 mkswap 指令格式化分割區。
sudo mkswap /dev/sdX
現在你必須編輯你的 /etc/fstab 以 root 身分新增您的交換分割區。新增到檔案中的這一行將設定一個在引導時掛載的交換分割區:
/dev/sdX none swap defaults 0 0
現在使用 swapon 啟動新交換空間的指令,其中 sdX 是交換分割區的名稱:
sudo swapon /dev/sdX
在 Linux 上使用交換檔案
在 Linux 中使用命令列很容易設定交換文件。如果您不想費心重新分區磁碟機或編輯,您可能想要這樣做 /etc/fstab. 一種方法是使用 fallocate指派:
例如,要建立一個 2GB 的交換檔案:
sudo fallocate -l 2G /path/to/swapfile
作為替代方案,您可以使用 dd 命令建立交換文件。
sudo dd if=/dev/zero of=/path/to/swapfile bs=1024</span > count=2048
確保正確使用 dd 命令,因為輸入檔案和輸出檔案錯誤會導致資料遺失。出於這個原因, fallocate 是首選方法。
這 /dev/zero device 是輸出「0」的特殊裝置。此 dd 指令所做的是使用適合用作交換空間的 1024 KB 區塊建立一個空白的 2 GB 區塊檔案。
然後,您可以使用 mkswap交換 和 swapon交換 使用交換文件的命令就像使用交換分割區一樣:
sudo mkswap /path/to/swapfile
sudo swapon /path/to/swapfile
您可能想知道何時應該為您的交換空間使用交換文件或專用分割區。選擇很簡單:在大多數情況下,您應該使用分割區。這是 Linux 桌面或伺服器的最佳選擇。安裝程式建議的分割區方案通常適用於單一使用者 Linux 桌面。
如果您在虛擬機器、小型嵌入式系統上執行 Linux,或者您只是不想對現有 Linux 系統進行重新分割,則可能需要使用交換檔案。
多少交換空間?
多年來,需要多少交換空間的標準建議是實體 RAM 的兩倍。即使是最便宜的 PC 也配備大容量驅動器和大量內存,這條規則可能會受到質疑。
在許多系統上,如果您檢查 top 或 htop,您甚至可能會注意到,如果您以這種方式設定係統,您的交換空間甚至根本沒有被使用。
儘管如此,如果您對記憶體提出更高的要求,兩倍的實體記憶體是一個很好的起點和保險政策。您可以根據需要對系統進行變更。如果您的系統正在使用所有 RAM,則電腦在使用虛擬記憶體時可能會遇到效能問題。
電腦可以不斷地交換進出,這個過程被稱為抖動,使它看起來沒有回應。如果你還有一個機械硬碟,你經常可以聽到它不斷的訪問。
如今,這已經不是什麼大問題了,因為即使是最便宜的 PC 上的 RAM 量也綽綽有餘,而且 SSD 的速度也比舊硬碟快得多。這仍然是您應該注意的事情。
解決此問題的最簡單方法是為您的電腦添加更多 RAM。如果這不可行,您可以嘗試調整 Linux 核心的「swappiness」。
swappiness 數字決定了核心在虛擬記憶體中投入了多少。它的範圍從 0 到 100。將其設為 0 意味著 Linux 根本不會交換,而在 100 時,它會隨時交換。大多數系統的預設值為 60。
若要暫時變更 swappiness,請使用 sysctl 指令:
sudo sysctl vm.swappiness=20
該命令中的「20」將是交換編號,直到您重新啟動。要永久更改它,請編輯/etc/sysctl.conf 文件作為根並放置行,“vm.swappiness=[swappiness number]“, 在哪裡”[swappiness number]” 是您想要的交換數量。這將是一個權宜之計,直到您可以安裝更多 RAM。
Linux虛擬記憶體讓系統順利運作
虛擬記憶體是現代作業系統(包括 Linux)的一個元件,可讓您的電腦平穩運行。您可以使用交換文件,但通常的方法是專用分割區。您不必考慮太多,但 Linux 交換分割區和交換檔案很容易設定和排除故障。
許多這種建議也適用於其他系統,包括 Windows,即使設定虛擬記憶體的方法不同。