百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

第7章 Linux磁盘管理—磁盘格式化和挂载

bigegpt 2024-11-14 14:03 5 浏览

提醒:本文为合集文章,后续会持续更新!

关注我,每日提升!

7.3 格式化磁盘分区

磁盘分区虽然分好区了,但暂时还不能用,我们还须对每一个分区进行格式化。所谓格式化,其实就是安装文件系统,Windows下的文件系统有FAT32和NTFS。前面章节中,阿铭介绍过Rocky 8以XFS作为默认的文件系统,但我们依然可以给它指定ext3或者ext4格式。

7.3.1 命令mke2fsmkfs.ext2mkfs.ext3mkfs.ext4mkfs.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为单位显示,阿铭还会在后续章节详细介绍该命令。

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...