提醒:本文為合集文章,後續會持續更新!
關注我,每日提升!
7.3 格式化磁盤分區
磁盤分區雖然分好區了,但暫時還不能用,我們還須對每一個分區進行格式化。所謂格式化,其實就是安裝檔案系統,Windows下的檔案系統有FAT32和NTFS。前面章節中,阿銘介紹過Rocky 8以XFS作為預設的檔案系統,但我們依然可以給它指定ext3或者ext4格式。
7.3.1 指令mke2fs、mkfs.ext2、mkfs.ext3、mkfs.ext4和mkfs.xfs
當用man指令查詢前4個指令的幫助文檔時,你會發現我們看到的是同一個幫助文檔,這說明這4個指令是一樣的。下面我們以mke2fs指令為例進行介紹。
mke2fs指令常用的選項如下所示。
- -b:表示分區時設定每個資料區塊占用的空間大小。目前,每個資料塊支援1024B、2048B以及4096B。
- -i:表示設定inode的大小。
- -N:表示設定inode的數量。有時預設的inode數不夠用,是以要自定義inode的數量。
- -c:表示在格式化前先檢測一下磁盤是否有問題。加上這個選項後,運作速度會非常慢。
- -L:表示預設該分區的标簽(label)。
- -j:表示建立ext3格式的分區。如果使用mkfs.ext3格式,就不用加這個選項了。
- -t:用來指定檔案系統的類型,可以是ext2、ext3 ,也可以是ext4。示例指令如下:
# mke2fs -t ext4 /dev/sda5
mke2fs 1.45.6 (20-Mar-2020)
建立含有 256000 個塊(每塊 4k)和 64000 個inode的檔案系統
檔案系統UUID:15043836-eee8-4d62-81f1-6e6fab5b6304
超級塊的備份存儲于下列塊:
32768, 98304, 163840, 229376
正在配置設定組表:完成
正在寫入inode表:完成
建立日志(4096 個塊)完成
寫入超級塊和檔案系統賬戶統計資訊: 已完成
指定檔案系統格式為ext4時,指令mke2fs -t ext4 /dev/sdb5等同于mkfs.ext4 /dev/sdb5。然而,mke2fs并不支援把分區格式化成XFS類型,而隻能使用mkfs.xfs,示例指令如下:
# mke2fs -t xfs /dev/sda6
mke2fs 1.45.6 (20-Mar-2020)
你的mke2fs.conf檔案中沒有定義類型 xfs 的檔案系統。
正在終止...
[root@aminglinux01 ~]# mkfs.xfs /dev/sda6
meta-data=/dev/sda6 isize=512 agcount=4, agsize=64000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=256000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1566, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
在上例中,你是否注意到“塊大小=4096”或者bsize=4096這項名額呢?這裡涉及“塊”的概念。磁盤在格式化的時候,會預先規定好每一個塊的大小,然後再把所有的空間分割成一個一個的小塊。存資料的時候,也是一個塊一個塊地寫入。如果你的磁盤裡存儲的都是特别小的檔案,比如說1KB或者2KB,阿銘建議你在格式化磁盤時指定塊數值小一點。ext4檔案系統的預設塊大小為4096B(即4KB)。在格式化時,可以指定塊大小為1024B、2048B或者4096B(它們是成倍增加的)。雖然格式化時可以指定塊大小超過4096B,但一旦超過4096B,就不能正常挂載。那麼,如何指定塊大小呢?下面阿銘示範一下具體操作方法,如下所示:
# mke2fs -t ext4 -b 8192 /dev/sda5
警告:塊大小 8192 在很多系統中不可用。
mke2fs 1.45.6 (20-Mar-2020)
/dev/sda5 有一個 ext4 檔案系統
建立于 Wed Oct 26 21:58:28 2022
Proceed anyway? (y,N) y
mke2fs: 8192位元組的塊對于系統來說太大(最大為 4096)
Proceed anyway? (y,N) y
警告:8192位元組的塊對于系統來說太大(最大為 4096),但仍然強制進行操作
建立含有 128000 個塊(每塊 8k)和 64000 個inode的檔案系統
檔案系統UUID:eac5dc07-01db-4367-9200-7c3457048fe3
超級塊的備份存儲于下列塊:
65528
正在配置設定組表: 完成
正在寫入inode表: 完成
建立日志(4096 個塊)完成
寫入超級塊和檔案系統賬戶統計資訊: 已完成
重新格式化sdb6時,會提示這個分區已經格式化過
# mkfs.xfs -b size=8192 /dev/sda6
mkfs.xfs: /dev/sda6 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
加上-f選項即可
# mkfs.xfs -b size=8192 -f /dev/sda6
meta-data=/dev/sda6 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=8192 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=8192 ascii-ci=0, ftype=1
log =internal log bsize=8192 blocks=1128, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=8192 blocks=0, rtextents=0
通過上面的小試驗可以發現,如果指定塊大小為8192B,會提示塊值設定得太大了,我們可以直接輸入y強制格式化。你還可以嘗試指定其他數字,但需要是1024的指數倍(1024、2048、4096或者8192)。其中,mkfs.xfs用法有點特殊,你需要注意和mke2fs區分。另外,還可以給分區指定标簽,如下所示:
mke2fs -L TEST -t ext4 /dev/sda5
mke2fs 1.45.6 (20-Mar-2020)
/dev/sda5 有一個 ext4 檔案系統
建立于 Wed Oct 26 22:00:36 2022
Proceed anyway? (y,N) y
建立含有 256000 個塊(每塊 4k)和 64000 個inode的檔案系統
檔案系統UUID:7af471e2-da5a-4897-be4e-049c990f2d9c
超級塊的備份存儲于下列塊:
32768, 98304, 163840, 229376
正在配置設定組表: 完成
正在寫入inode表: 完成
建立日志(4096 個塊)完成
寫入超級塊和檔案系統賬戶統計資訊: 已完成
這裡我們可以使用-L選項來指定标簽。标簽會在挂載磁盤時使用,也可以寫入配置檔案,這個阿銘稍後介紹。
關于格式化的這部分内容,阿銘建議你,除非有需求,否則不需要指定塊大小。也就是說,你隻需要記住-t和-L這兩個選項即可。
7.3.2 指令e2label
該指令用于檢視或修改分區的标簽,它隻支援ext格式的檔案系統,而不支援XFS檔案系統。這個指令阿銘很少使用,你隻要了解一下即可。示例指令如下:
# e2label /dev/sda5
TEST
# e2label /dev/sda5 TEST123
# e2label /dev/sda5
TEST123
7.4 挂載/解除安裝磁盤
前面我們講到了磁盤的分區和格式化,那麼格式化完成後,如何使用這些磁盤呢?這就涉及挂載磁盤了。格式化後的磁盤其實是一個塊裝置檔案,類型為b。也許你會想,既然這個塊檔案就是那個分區,那麼直接在那個檔案中寫資料不就可以寫入那個分區了嗎?這當然不行。
在挂載某個分區前,需要先建立一個挂載點,這個挂載點是以目錄的形式出現的。一旦把某個分區挂載到這個挂載點(目錄)下,要再往這個目錄寫資料時,就都會寫到該分區中。是以,在挂載該分區前,挂載點(目錄)下必須是個空目錄。其實目錄不為空并不影響所挂載分區的使用,但一旦挂載上了,該目錄下以前的東西就看不到了(資料并沒有丢失),除非解除安裝該分區。
7.4.1 指令mount
如果不加任何選項,直接運作mount指令,會顯示如下資訊:
# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=897764k,nr_inodes=224441,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
none on /sys/kernel/tracing type tracefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/rl-root on / type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
mqueue on /dev/mqueue type mqueue (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=43,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=22907)
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=183320k,mode=700)
輸出的資訊量有點大,大家先不用關心這些内容的含義。使用這個指令,可以檢視目前系統已經挂載的所有分區、分區檔案系統的類型、挂載點及一些選項等資訊。如果想知道某個已挂載分區的檔案系統類型,直接用mount指令檢視即可。而未挂載的分區,怎麼看呢,大家可以使用blkid指令檢視,後面會講到它。下面我們先建立一個空目錄,然後在目錄裡建一個空白文檔。示例指令如下:
# mkdir /newdir
# touch /newdir/newfile.txt
# ls /newdir/
newfile.txt
然後把剛才格式化的/dev/sda5挂載到/newdir上,如下所示:
# mount /dev/sda5 /newdir/
# ls /newdir/
lost+found
# df -h |grep -v tmpfs
檔案系統 容量 已用 可用 已用% 挂載點
/dev/mapper/rl-root 17G 6.6G 11G 39% /
/dev/nvme0n1p1 1014M 194M 821M 20% /boot
/dev/sda5 969M 2.5M 900M 1% /newdir
把/dev/sda5挂載到/newdir後,原來在/newdir下的newfile.txt就看不到了,通過指令df -h指令可以檢視剛剛挂載的分區。
我們也可以使用LABEL的方式挂載分區,如下所示:
# umount /newdir/
# df -h |grep -v tmpfs
檔案系統 容量 已用 可用 已用% 挂載點
/dev/mapper/rl-root 17G 6.6G 11G 39% /
/dev/nvme0n1p1 1014M 194M 821M 20% /boot
# mount LABEL=TEST123 /newdir
# df -h |grep -v tmpfs
檔案系統 容量 已用 可用 已用% 挂載點
/dev/mapper/rl-root 17G 6.6G 11G 39% /
/dev/nvme0n1p1 1014M 194M 821M 20% /boot
/dev/sda5 969M 2.5M 900M 1% /newdir
本例中用到了umount指令,這個指令是用來解除安裝磁盤分區的,阿銘稍後介紹。
mount指令常用的選項有-a、-t和-o。在介紹-a選項前,我們需要先了解一下/etc/fstab這個檔案。
7.4.2 /etc/fstab配置檔案
我們先來檢視一下/etc/fstab檔案的内容,如下所示:
# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Jun 3 19:18:31 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root / xfs defaults 0 0
UUID=21f78c94-6652-406f-9f3a-57bd1cdc719f /boot xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
這個檔案中顯示了系統啟動時需要挂載的各個分區,下面阿銘簡單描述一下各列的含義。
- 第1列就是分區的辨別,可以寫分區的LABEL、分區的UUID(等會阿銘會着重講一下這個概念),也可以寫分區名(比如:/dev/sda1)。
- 第2列是挂載點,即要挂載到的目錄名。
- 第3列是分區的格式。
- 第4列是mount的一些挂載參數。一般情況下,直接寫defaults即可。
- 第5列的數字表示是否被dump備份。1表示備份,0表示不備份。
- 第6列的數字表示開機時是否自檢磁盤。1和2都表示檢測,0表示不檢測。自檢時,1比2優先級高,是以先檢測1,再檢測2。如果有多個分區需要開機檢測,就都設定成2,1檢測完後會同時檢測2。在CentOS 7/Rocky 8系統裡,所有分區中該列的值都是0。
下面阿銘着重介紹第4列的常用選項。
- async/sync:async表示與磁盤和記憶體不同步。系統每隔一段時間就會把記憶體資料寫入磁盤中,而sync則會時時同步記憶體和磁盤中的資料。
- auto/noauto:表示開機自動挂載/不自動挂載。
- default:表示按照大多數永久檔案系統的預設值設定挂載定義,它包含了rw、suid、dev、 exec、auto、nouser和async。
- ro:表示按隻讀權限挂載。
- rw:表示按可讀可寫權限挂載。
- exec/noexec:表示允許/不允許可執行檔案執行,但千萬不要把根分區挂載為noexec,否則将無法使用系統,甚至連mount指令都無法使用。
- user/nouser:表示允許/不允許root外的其他使用者挂載分區。為了安全,請用nouser。
- suid/nosuid:表示允許/不允許分區有suid屬性,一般設定nosuid。
- usrquota:表示啟動使用者的磁盤配額模式。磁盤配額會針對使用者限定他們使用的磁盤額度。
- grquota:表示啟動群組的磁盤配額模式。
學完了/etc/fstab,我們就可以自己修改這個檔案,增加一行來挂載新增分區。例如,阿銘增加了這樣一行:
LABEL=TEST123 /newdir ext4 defaults 0 0
然後解除安裝之前已經挂載的/dev/sda5,如下所示:
# umount /dev/sda5
# df -h |grep -v tmpfs
檔案系統 容量 已用 可用 已用% 挂載點
/dev/mapper/rl-root 17G 6.6G 11G 39% /
/dev/nvme0n1p1 1014M 194M 821M 20% /boot
使用指令df -h檢視,會發現已經成功解除安裝/dev/sdb5。下面執行指令mount -a:
# mount -a
# df -h |grep -v tmpfs
檔案系統 容量 已用 可用 已用% 挂載點
/dev/mapper/rl-root 17G 6.6G 11G 39% /
/dev/nvme0n1p1 1014M 194M 821M 20% /boot
/dev/sda5 969M 2.5M 900M 1% /newdir
使用指令df -h檢視,會發現多出一個檔案/dev/sdb5挂載到了/newfir下,這就是mount -a指令執行的結果。這個-a選項會把/etc/fstab中出現的所有磁盤分區挂載上。除了-a選項外,還有兩個常用的選項。
- -t選項:用來指定挂載的分區類型,預設不指定,會自動識别。
- -o選項:用來指定挂載的分區有哪些特性,即上面/etc/fstab配置檔案中第4列的那些。這個選項阿銘經常使用,示例指令如下:
# mkdir /newdir/dir1
# mount -o remount,ro,sync /dev/sda5 /newdir
# mkdir /newdir/dir2
mkdir: 無法建立目錄"/newdir/dir2": 隻讀檔案系統
由于-o選項指定了ro參數,是以該分區隻讀了。通過mount指令可以看到,/dev/sda5也有ro參數,示例指令如下:
# mount |grep sda5
/dev/sda5 on /newdir type ext4 (ro,relatime,sync)
下面阿銘重新挂載,讓它恢複讀寫,如下所示:
# mount -o remount /newdir #這裡可以省略掉磁盤分區,隻寫挂載點
# mkdir /newdir/dir2
# ls /newdir/
dir1 dir2 lost+found
7.4.3 指令blkid
阿銘在日常的運維工作中遇到過這樣的情況,一台伺服器上新裝了兩塊磁盤:磁盤a(在伺服器上顯示為sdc)和磁盤b(在伺服器上顯示為sdd)。有一次阿銘把這兩塊磁盤都拔掉了,之後再重新插上,重新開機機器,結果磁盤編号被調換了,即磁盤a顯示為sdd,磁盤b顯示為sdc(這是因為阿銘把磁盤插錯了插槽)。
我們知道挂載磁盤是通過/dev/sda1這樣的分區名字來挂載的,如果該分區先前已加入到/etc/fstab中,系統啟動後則會挂載錯分區。那麼,怎樣避免這樣的情況發生呢?這就用到了UUID。我們可以通過blkid指令擷取各分區的UUID,如下所示:
# blkid
/dev/sda5: LABEL="TEST123" UUID="7af471e2-da5a-4897-be4e-049c990f2d9c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="3d19a658-05"
/dev/nvme0n1p1: UUID="21f78c94-6652-406f-9f3a-57bd1cdc719f" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="91dd1aed-01"
/dev/nvme0n1p2: UUID="wFTzNH-yNbZ-hP00-mRUH-sILl-nbcq-oAWzt3" TYPE="LVM2_member" PARTUUID="91dd1aed-02"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-11-14-09-30-59-00" LABEL="Rocky-8-5-x86_64-dvd" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"
/dev/mapper/rl-root: UUID="cbb1e131-d2a3-4b62-a1fe-b1172e295101" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/rl-swap: UUID="c05b4dde-37bf-48d9-b9ee-a51f1c15d027" TYPE="swap"
/dev/sda6: UUID="aa787ecd-eb79-4b52-92fa-e4d594fb3ff8" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="3d19a658-06"
/dev/nvme0n1: PTUUID="91dd1aed" PTTYPE="dos"
這樣可以獲得全部磁盤分區的UUID。如果格式化時指定了LABEL,則該指令也會顯示LABEL值,檔案系統的類型也會顯示。當然,這個指令後面也可以指定查詢哪個分區,示例指令如下:
# blkid /dev/sda5
/dev/sda5: LABEL="TEST123" UUID="7af471e2-da5a-4897-be4e-049c990f2d9c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="3d19a658-05"
獲得UUID後,我們如何使用它呢?用法如下所示:
# umount /newdir
# mount UUID="7af471e2-da5a-4897-be4e-049c990f2d9c" /newdir
UUID也是支援寫入到/etc/fstab中的,示例指令如下:
# tail -1 /etc/fstab
UUID="7af471e2-da5a-4897-be4e-049c990f2d9c" /newdir ext4 defaults 0 0
如果想讓某個分區在開機後自動挂載,有兩個辦法可以實作:一是在/etc/fstab中添加一行,如上例中那行;二是把挂載指令寫到/etc/rc.d/rc.local檔案中去,系統啟動後會執行這個檔案中的指令。隻要你把想要開機啟動的指令統統寫入到這個檔案中(直接放到最後)即可。阿銘經常把挂載的指令放到該檔案的最後一行,示例指令如下:
# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
mount UUID="7af471e2-da5a-4897-be4e-049c990f2d9c" /newdir
有的朋友可能會遇到這樣的情況,把指令寫入/etc/rc.d/rc.local檔案裡,卻并沒有開機執行,這很有可能是因為系統并沒有找到那個指令。是以,為了避免此類問題,阿銘建議你,以後寫入到該檔案的指令,要使用絕對路徑,比如本例中的mount應該寫成/usr/bin/mount。更改完/etc/rc.d/rc.local檔案後,還需要一步操作:
# chmod a+x /etc/rc.d/rc.local
這是因為,在Rocky 8系統,該檔案預設沒有執行權限。以上兩種方法任選其一,阿銘介紹第2種方法其實也是告訴你:如何讓一些操作行為随系統啟動而自動執行。另外,阿銘建議你在挂載磁盤分區時,盡量使用UUID或者LABEL這兩種方法。
7.4.4 指令umount
在上面的小試驗中,阿銘多次用到umount指令。這個指令後面可以跟挂載點,也可以跟分區名(如/dev/sda1),但是不可以跟LABEL和UUID。示例指令如下:
# umount /dev/sda5
# mount UUID="7af471e2-da5a-4897-be4e-049c990f2d9c" /newdir
# umount /newdir
# mount UUID="7af471e2-da5a-4897-be4e-049c990f2d9c" /newdir
umount指令的-l選項非常有用。有時候你會遇到不能解除安裝的情況,如下所示:
# umount /newdir
umount: /newdir:目标忙。
(有些情況下通過 lsof(8) 或 fuser(1) 可以找到有關使用該裝置的程序的有用資訊)
不能解除安裝是因為目前目錄還在解除安裝的分區上。解決這個問題的辦法有兩種:一是進入到其他目錄;二是使用umount指令的-l選項,示例指令如下:
# umount -l /newdir
# df -h |grep -v tmpfs
檔案系統 容量 已用 可用 已用% 挂載點
/dev/mapper/rl-root 17G 6.6G 11G 39% /
/dev/nvme0n1p1 1014M 194M 821M 20% /boot
7.5 建立一個swap檔案增加虛拟記憶體
安裝系統時我們就接觸了swap指令,它類似于Windows的虛拟記憶體,分區時一般指定虛拟記憶體的大小為實際記憶體的2倍。如果你的實際記憶體超過4GB,那麼劃分8GB給虛拟記憶體就足夠日常交換了。如果真遇到了虛拟記憶體不夠用的情況,就必須增加一個虛拟磁盤,因為我們不可能重新給磁盤分區。增加虛拟磁盤的基本思路是:建立swapfile→格式化為swap格式→啟用該虛拟磁盤。
首先,建立swapfile,如下所示:
# dd if=/dev/zero of=/tmp/newdisk bs=1M count=1024
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824位元組(1.1 GB)已複制,6.36177 秒,169 MB/秒
dd指令阿銘經常用到,是以請你也要掌握它的使用方法:用if指定源(一般是寫/dev/zero,它是UNIX系統特有的一個檔案,它可以源源不斷地提供“0”),of指定目标檔案,bs定義塊的大小,count定義塊的數量。bs和count這兩個參數決定了目标檔案的大小,即目标檔案大小=bs*count。上面的示例中,阿銘用dd指令建立一個大小為1.1GB的檔案,下面将它格式化為swap格式,指令如下:
# mkswap -f /tmp/newdisk
mkswap: /tmp/newdisk:不安全的權限 0644,建議使用 0600。
正在設定交換空間版本 1,大小 = 1024 MiB (1073737728 個位元組)
無标簽,UUID=df739399-cb11-4a92-b8db-9e94e257b815
檔案格式化後,就可以挂載使用了,如下所示:
# free -m
total used free shared
buff/cache available
Mem: 1806 235 293 8 1276 1413
Swap: 4095 0 4095
# swapon /tmp/newdisk
swapon: /tmp/newdisk:不安全的權限 0644,建議使用 0600。 //雖然提示不安全,但實際已經挂載上
# free -m
total used free shared
buff/cache available
Mem: 1806 236 293 8 1276 1412
Swap: 5119 0 5119
前後對比一下swap分區,我們發現多了1024MB的空間。其中,free指令用來檢視記憶體的使用情況,-m選項表示以MB為機關顯示,阿銘還會在後續章節詳細介紹該指令。