1、什么是內存交換分區(swap)
物理內存:計算機內存的大小,即內存條的大小;
虛擬內存:計算機拿出一部分硬盤的空間來充當內存;
交換分區(swap):當物理內存不夠用時,可以拿這個部分來存放內存中較少被使用的數據。
2、使用物理分區創建內存交換分區
2.1使用物理分區創建swap
建立swap的步驟:
- 分區:先使用【gdisk】在你的磁盤中划分出一個分區給系統作為swap,由於Linux的【gdisk】默認會將分區的ID設置為Linux的文件系統,所以可能還得要設置【system ID】
- 格式化:利用建立swap格式的【mkswap 設備文件名】就能夠格式化該分區成為swap格式
- 使用::啟動swap設備,【swapon 設備文件名】
- 觀察::通過【free】與【swapon -s】來觀察內存的使用量
(1)先進行分區操作
[root@study ~] gdisk /dev/vda Command (? for help) : n #【n】 add a new partition Partition number (6-128, default 6): First sector (34-83886046, default = 69220352) or {+-}size{KMGTP}: Last sector (69220352-83886046, default = 83886046) or {+-}size{KMGTP}: +512M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8200 #在分區內的可能的文件系統類型Linux為8300,swap為8200 Changed type of partition to 'Linux swap' Command (? for help) : p #【p】print the partition table Number Start (sector) End (sector) size Code Name 6 69220352 70268927 512.0 MiB 8200 Linux swap Command (? for help) : w #上述操作生效,write table to disk and exit Do you want to proceed? (Y/N) : y [root@study ~] partprobe #更新Linux內核的分區表信息 [root@study ~] lsblk #列出系統上的所有磁盤列表 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 40G 0 disk ...... -vda 252:6 0 512M 0 part #結果中有了一個 /dev/vda6 可以用於swap
(2)開始創建swap格式
[root@study ~] mkswap /dev/vda6 #將【/dev/vda6】這個文件格式化為內存交換文件的文件格式 Setting up swapspace version 1, size = 524284 KiB no label, UUID=6b17e4ab-9bf9-43d6-88a0-73ab47855f9d [root@study ~] blkid /dev/vda6 /dev/vda6: UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" TYPE="swap" #格式化成功
(3)觀察與掛載
[root@study ~] free #觀察內存和硬盤的swap total used free shared buff/cache available Mem: 1275140 227244 330124 7804 717772 875536 #物理內存 Swap: 1048572 101340 947232 #swap相關 #1275140K的物理內存,使用227244K,剩余330124K,使用掉的內存有717772K被緩存使用 #swap有1048572K [root@study ~] swapon /dev/vda6 #觀察/dev/vda6容量 [root@study ~] free #觀察內存和硬盤的swap total used free shared buff/cache available Mem: 1275140 227244 330124 7804 717772 875536 #物理內存 Swap: 1572856 101260 1471596 #這里total、free均有增加,used有減少 [root@study ~] swapon -s #【-s】:顯示交換區的使用狀況 Filename Type Size Used Priority /dev/dm-1 partition 1048572 101260 -1 /dev/vda6 partition 524284 0 -2 [root@study ~] nano /etc/fstab # 寫入配置文件,啟動時自動掛載 UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" swap swap defaults 0 0 # 不是文件系統,所以沒有掛載點,第二欄寫入swap # [設備 / UUID等] [掛載點] [文件系統] [文件系統參數] [dump] [fsck]
3、使用文件創建內存交換分區
(1)使用【dd】命令在 【/tmp】下新增一個 128MB的文件
[root@study ~] dd if=/dev/zero of=/tmp/swap bs=1M count=128 #從/dev/zero中讀入128M的0到/tmp/swap中 128+0 records in #讀入128條數據 128+0 records out #輸出128條數據 134217728 Bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s [root@study ~] ll -h /tmp/swap -rw-r--r-- 1 root root 128M Jun 26 17:47 /tmp/swap # if : input file,輸入文件,/dev/zero 是會一直輸出 0 的設備 # of : output file,將一堆 0 寫入到后面的文件中(這里是/srv/loopdev) # bs : 是block的size,就像文件系統那樣的block意義 # count : 總共bs的個數,文件容量=bs*count
(2)使用【mkswap】將【/tmp/swap】這個文件格式化為內存交換文件的文件格式
[root@study ~] mkswap /tmp/swap #寫此命令時注意不要寫錯字符,否則可能使文件系統掛掉 Setting up swapspace version 1, size = 131068 KiB no label,UUID=4746c8ce-3f73-4f83-b883-33b12fa7337c
(3)使用【swapon】來將【/tmp/swap】啟動
[root@study ~] swapon /tmp/swap #觀察 /tmp/swap 的容量 [root@study ~] swapon -s #【-s】:顯示交換區的使用狀況 Filename Type Size Used Priority /dev/dm-1 partition 1048572 101260 -1 /dev/vda6 partition 524284 0 -2 /tmp/swap file 131068 0 -3
(4)使用【swapoff】關閉swap file,並設置自動啟用
[root@study ~] nano /etc/fstab #nano文本編輯器來編輯啟動時的配置文件【/etc/fstab】 /tmp/swap swap swap defaults 0 0 # [設備 / UUID等] [掛載點] [文件系統] [文件系統參數] [dump] [fsck] # 為什么這里第一欄不使用UUID,因為系統僅會查詢區塊設備(block device)不會查詢文件 [root@study ~] swapoff /tmp/swap /dev/vda6 #關閉swap file [root@study ~] swapon -s #【-s】:顯示交換區的使用狀況 Filename Type Size Used Priority /dev/dm-1 partition 1048572 101260 -1 [root@study ~] swapon -a #【-a】:將/etc/fstab文件中所有設置為swap的設備,啟動為交換區
本文學習內容來自:《鳥哥的Linux私房菜》
2021-07-02 11:59:40