0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux磁盘格式化和挂载介绍

阿铭linux 来源:阿铭linux 作者:阿铭 2022-10-28 09:08 次阅读

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-txfs/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 2128 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=noneextsz=8192blocks=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 2236 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 1931 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/newdirext4defaults00

然后卸载之前已经挂载的/dev/sda5,如下所示:

# umount /dev/sda5
# df -h |grep -v tmpfs
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/rl-root   17G  6.6G   11G   39% /
/dev/nvme0n1p11014M194M821M20%/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-oremount,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
#mountUUID="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
mountUUID="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
#mountUUID="7af471e2-da5a-4897-be4e-049c990f2d9c"/newdir
# umount /newdir
#mountUUID="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/nvme0n1p11014M194M821M20%/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为单位显示,阿铭还会在后续章节详细介绍该命令。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 磁盘
    +关注

    关注

    1

    文章

    338

    浏览量

    24882
  • NTFS
    +关注

    关注

    0

    文章

    10

    浏览量

    8563
  • LINUX内核
    +关注

    关注

    1

    文章

    311

    浏览量

    21388

原文标题:第7章 Linux磁盘管理 — 磁盘格式化和挂载

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux添加磁盘创建分区、挂载

    Linux添加磁盘创建分区、挂载
    发表于 04-20 17:49 93次阅读
    <b class='flag-5'>Linux</b>添加<b class='flag-5'>磁盘</b>创建分区、<b class='flag-5'>挂载</b>

    CYUSB3KIT-003创建U盘后插入电脑每次提示要格式化,怎么操作才能只需要格式化一次?

    创建U盘后插入电脑每次提示要格式化,有没有办法像真正的U盘那样只是第一次需要格式化
    发表于 02-29 08:30

    请问RT-Thread emmc驱动编写如何格式化

    SDIO,同时也ST自带的驱动测试到了EMMC的擦除,读写操作 但是我看到使用文件系统,首先需要格式化吧,但是格式化的接口是空的,无操作。所以我想知道这个格式化驱动盘是否有什么操作要求,或者参考的代码呢
    发表于 02-23 08:04

    手机格式化新用户

    看小说新用户奖励,手机格式化之后换个号码还能领取新用户奖励,请问有大佬知道不格式化自己动手去删除根文件能达到格式化效果吗
    发表于 12-07 19:14

    请问keil怎么格式化代码?

    一直都是复制到格式化工具里 然后复制回来 不知道有没有快捷键格式化?
    发表于 11-08 06:32

    如何解决bitlockerU盘 格式化

    SanDis U盘 128G,没有物理保护键,设置了bitlocker,知道密码,可以正常读取,无法编辑,Windows下无法使用格式化磁盘工具检查修复无法运行,我的电脑右键管理中磁盘工具无法
    发表于 10-28 21:08

    FATFS格式化FR_NOT_READY错误怎么解决?

    对U盘进行格式化,返回了一个错误是FR_NOT_READY错误挂载的时候f_mount(fs \"1:\" 0);返回FR_OK挂载的时候 f_mount(fs \"1:\" 1);也是返回FR_NOT_READY错误,这FR_
    发表于 10-18 07:32

    Yapf:一个格式化 Python 代码的好帮手

    大部分人使用Python中的代码格式化工具时都会选择autopep8之类的工具,这些工具可能有一定的局限性,比如不会重新格式化已经符合 PEP8 的代码。 而本文即将介绍的 Yapf,不仅能将代码
    的头像 发表于 10-17 11:08 421次阅读
    Yapf:一个<b class='flag-5'>格式化</b> Python 代码的好帮手

    如何使用 Java 原生格式化Instant

    今天我们将聊聊如何在Java中把一个 Instant 格式化为一个字符串。我们将展示如何使用 Java 原生和第三方库(如Joda-Time)来处理这个事情。 使用 Java 原生格式化
    的头像 发表于 10-09 14:51 556次阅读

    MDK使用AStyle进行代码自动格式化

    MDK使用AStyle进行代码自动格式化
    的头像 发表于 09-19 14:22 1583次阅读
    MDK使用AStyle进行代码自动<b class='flag-5'>格式化</b>

    服务器数据恢复-LINUX下误删除/格式化的数据恢复方案

    服务器数据恢复环境: 基于EXT2/EXT3/EXT4/Reiserfs/Xfs文件系统的Linux操作系统。 服务器故障: LINUX操作系统下误删除/格式化数据。
    的头像 发表于 09-15 15:29 551次阅读

    nano130se3bn时发现hid正常,但在格式化时发现无法格式化是什么原因导致的?

    我用nano130ke3bn开发板参考usb hid和msc的code,测试了usb功能正常。 但用同样的code或参考的usb code测试nano130se3bn时,发现hid正常,但在格式化时发现无法格式化,pc界面一直处于格式
    发表于 06-27 10:11

    格式化输入

    ()函数功能: 执行格式化输入(用户可以按照指定格式输入数据) scanf()函数原型: int scanf(char *format[,argument,...]); scanf()从标准输入设备
    发表于 05-26 11:21

    说一说MounRiver Studio的代码格式化

    MounRiver Studio具有代码格式化功能,方法是右键选择某个c文件,点击“代码格式化”即可。这个功能只针对某个c或h文件,一键全工程代码格式化的功能入口还没有找到。 但代码格式化
    发表于 05-12 09:08

    Linux系统的三种挂载方式

    hello,大家好!在服务器使用过程中,mount挂载几乎是最常用的一种操作了,这周就给大家介绍一下linux文件挂载相关介绍
    的头像 发表于 05-06 09:20 592次阅读