磁盘类型和相关术语学习笔记

磁盘类型和相关术语


在 Linux 中一切皆文件,但是类型不同。例如使用 ls -l 对于设备文件和普通文件有一部分内容是不同的,即普通文件有大小,而设备文件有主设备号和次设备号,没有大小。

# ll 1.txt /dev/sda /dev/sda1
-rw-r--r-- 1 root root   47 Nov 30 21:22 1.txt
brw-rw---- 1 root disk 8, 0 Dec  3 10:13 /dev/sda
brw-rw---- 1 root disk 8, 1 Dec  3 10:13 /dev/sda1

如果使用 cp -a 复制一个块设备,这时两个文件的主设备号和次设备号相同,但是它们的 inode 不同,类似于文件的软连接。如果挂载复制出来的文件,可以访问到与被复制的设备的内容。

# df /dev/sda1
Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/sda1         487634 142353    315585  32% /boot

# cp -a /dev/sda1 ./sda1.bak
# mount sda1.bak /mnt

# df /mnt
Filesystem     1K-blocks   Used Available Use% Mounted on
/root/sda1.bak    487634 142353    315585  32% /mnt

# ll -id /mnt /dev/sda1
15113 brw-rw----  1 root disk 8, 1 Dec  3 10:13 /dev/sda1
    2 dr-xr-xr-x. 6 root root 1024 Nov 13 18:27 /mnt

使用专门的命令来创建相同的设备:

# mknod /data/sda1 b 8 1
# mount /data/sda1 /mnt/

# df /mnt
Filesystem     1K-blocks   Used Available Use% Mounted on
/data/sda1        487634 142353    315585  32% /mnt

硬盘种类繁多,可能有:

/dev/sd[a-z]         # SCSI、SATA、SAS、USB 等
/dev/nvme...         # nvme 协议,例如 固态硬盘
/dev/vd              # 虚拟硬盘
/dev/xvd

如果在虚拟机上新增了几块硬盘,可以使用以下命令来进行扫描,使系统能够设别出来。

$ echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan

# 最好设置成别名
# alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"

可以使用以下命令判断是否具有旋转特性的存储设备,值是 1 表示是机械硬盘, 值是 0 表示固态硬盘:

]# lsblk -d -o NAME,ROTA
NAME ROTA
sda     1
sr0     1

也可以使用以下命令查看:

]# ls /sys/block                     # 列出当前的硬件设备
sda  sr0
]# cat /sys/block/sda/queue/rotational
1
]# cat /sys/block/sr0/queue/rotational
1

]# cat /sys/block/*/query/rotational

磁盘分区

分区方式

目前有两种分区的方式:MBR、GPT。

MBR

MBR:Master Boot Record, 1982年,使用 32 位表示扇区数,分区不超过 2T。

$ echo 2^32*512/1024/1024/1024 | bc
2048

CentOS 6 版本开始按照 Sector 划分,而 CentOS 5 及之前采用柱面划分。

0 磁道 0 扇区:512 bytes
446 bytes --> boot loader
64 bytes --> 分区表,每 16 字节标识一个分区
2 bytes --> 55AA

因此,MBR 分区的硬盘最多只能有 4 个主分区,或分出其中的分区成为扩展分区。

可以使用以下命令查看十六进制的分区情况,最后部分是有关分区的数据:

# hexdump -C -n 512 /dev/sda1

硬盘的分区表数据很重要,如果不小心弄坏了,就不能启动电脑了。我们需要对分区表进行备份(Disk Partition Table):

说明:dd 命令中 skip 表示跳过源位置,seek 表示跳过目标位置

# 备份分区表
]# dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
]# scp dpt.img 10.0.0.200:

# 破坏分区表
]# dd if=/dev/zero of=/data/sda bs=1 count=64 skip=446
# 使用以下命令已经看不到分区表
]# fdisk -l

如果此时进行 reboot 就无法启动 Linux 了。

我们需要使用其他启动方式,例如使用光盘启动,进入 ‘rescue mode’,选择第 3 项 ‘skip to shell’。

先要配置网络,没有网络可能得不到备份文件。

]# ifconfig ens33 10.0.0.100/24           # 或使用推荐的命令
]# ip addr add 10.0.0.100/24  dev ens33

]# scp 10.0.0.200:/root/dpt.img ./

# 恢复分区表
]# dd if=dpt.img of=/dev/sda bs=1 seek=446
]# exit
GPT

GPT:GUID (Globals Unique IDentifiers),支持128个分区表,使用 64 位,支持 8Z 空间(512Byte/block)至 64Z 空间(4096Byte/block)。

使用 128 位 UUID (Universible Firmware Interface)表示磁盘和分区。该分区表自动在头和尾进行备份,并有 CRC 校验位。

UEFI(Unified Extensible Firmware Interface)统一可扩展固件接口的硬件支持 GPT 分区。

BIOS 和 UEFI

BIOS 采用了 16 位汇编语言编写,只能运行在实模式中(内存寻址方式由 16 位段寄存器的内容乘以16 (10H) 当做段基地址,加上 16 位偏移地址形成 20 位的物理地址下,可访问的内存空间为 1MB,只支持字符操作界面。

UEFI 采用了 32 位或 64 位的 C 语言编写,突破了实模式的限制,可达最大的寻址空间,支持图形界面,使用文件方式保存信息,支持 GPT 分区启动,适合较新的系统和硬件配合使用。

管理分区

列出块设备的命令是 lsblk

创建分区命令:

fdisk       # 管理 MBR 分区,在 CentOS 8 中也支持 GPT 分区
gdisk       # 管理 GPT 分区
parted      # 高级分区操作

重新设置内存中的内核分区表,使内存中的分区与 fdisk 显示的一样:

# 对于 CentOS 5,7, 8 使用
partprobe

# 以上命令对于 CentOS 6 没有效果,使用以下命令
partx -a /dev/sda
# 如果删除了 6,7, 8 三个分区,这时需要使用以下参数
partx -d --nr 6-8 /dev/sda

可以使用以下命令查看分区的情况:

fdisk l
lsblk
cat /proc/partitions
parted 命令

该命令支持可交互或非交互的方式,其操作是实时生效的,要小心使用。其使用格式为:

parted [option]... [device [cmd [param]...]...]

示例:

parted /dev/sdb mklabel gpt|msdos       # msdos for MBR
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200    # 默认单位是 M
parted /dev/sdb rm 1                    # 1 表示第一个分区数字
parted -l                               # 列出所有硬盘分区信息

dd if=/dev/zero of=/dev/sdb bs=1 count=66 seek=64    # 清除分区信息及最后两个字节 '55aa'
dd if=/dev/zero of=/dev/sdb bs=1 count=2 seek=510    # 清除分区表最后两个字节 '55aa'
fdisk

从 CentOS 8 开始也支持 GPT 分区,它是交互式操作的。操作时有对应的提示。不是实时操作的。

如果只有一块硬盘,需要安装操作系统,必须要设置主分区,如果不安装操作系统,可以创建扩展分区。但是最多只能是一个扩展分区,而主分区最多只能有4个。

如果有几个扩展的逻辑分区,中途删除一个分区,则后面的分区编号会自动填补空缺,这样说明,使用这样的设备名在编程中可能由于设备名改变造成不正确 /dev/sda5

如果想要使用非交互式创建分区

echo -e 'n\np\n\n\n+2G\nw\n' | fdisk /dev/sdc

文件系统

文件系统概念

操作系统负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。从系统角度看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩和加密等。

支持的文件系统:

ls /lib/modules/`uname -r`/kernel/fs

查询帮助

man 5 fs
文件系统类型

Linux 常用文件系统

  • ext2:Extended file system,适用于分区容量不太大,不频繁更新的分区,例如,/boot 分区
  • ext3:是 ext2 的改进版本,支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
  • ext4:是 ext 文件系统的最新版。提供了许多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16T),最大 1EB 的文件系统,以及提升速度
  • xfs:SGI,支持最大 8EB 的文件大小
  • swap:交换
  • iso9660:光盘
  • btrfs
  • reiserfs

Windsows 常用文件系统

  • FAT32
  • NTFS
  • exFAT

Unix

  • FFS (fast fs)
  • UFS (unix fs)
  • JFS2

网络文件系统

  • NfS
  • CIFS

集群文件系统

  • GFS2
  • OCFS2 (oracle)

分布式文件系统

  • fastdfs
  • ceph
  • moosefs
  • mogilefs
  • glusterfs
  • Lustre
创建文件系统

创建文件系统的工具:

  • mkfs 命令:可以使用以下两种形式,-L 'LABEL 表示卷标

    mkfs.FS_TYPE /dev/DEVICE    # FS_TYPE 表示文件系统,例如 ext2,ext3,ext4等
    
    mkfs -t FS_TYPE /dev/DEVICE # 另一种形式
    
  • mke2fs 命令:ext 系列文件系统专用工具

以上命令的常用选项:

-t {ext2|ext3|ext4} # 指定文件系统类型
-b {1024|2048|4096} # 指定块大小
-L 'LABEL'          # 设置卷标
-j                  # 相当于 '-t ext3', 'mkfs.ext3'
-i #                # 指定每多少个字节创建一个 inode,不应该小于 block 大小
-N #                # 指定分区中创建多少个 inode
-l                  # 一个 inode 记录占用磁盘空间的大小,'128~4096'
-m #                # 默认 '5%',为管理人员占用总空间的比例
-O FEATURE[,...]    # 启用指定的特性
-O ^FEATURE         # 关闭指定的特性
    ```
对于 `ext4` 类型,想要查看块大小需要使用,可以在列出的数据中看到 'block size:   4096'

```bash
tune2fs -l /dev/sda1

对于 xfs 类型,想要查看块大小需要使用,可以看到 ‘bsize=4096’

xfs-info
df /dev/xxx           # 用于查看文件系统占用的空间
du -s /dev/xxx        # 用于查看文件所占用的空间大小

从以上可以看出,创建文件需要占用两种空间,一是 inode 元数据,另一个是文件本身实际占用的空间。如果创建的空文件,文件不占用实际空间,但是要占用 inode 空间。如果创建的文件大小比块大小,如比 4k小,也要占用这个最小空间。因此,一般需要对今后可能的文件有一个规划,如果都是小文件,比 4k 小,则指定更小的块大小。

查看和管理分区信息
  1. blkid 可以查看块设备的属性信息

    blkid [option]...[device]
    

    常用选项:

    • -U UUID # 根据指定的 UUID 来查看对应的设备
    • -L LABEL # 根据指定的 LABEL 来查看对应的设备
  2. e2label: 管理 ext 系列文件系统的标签

    e2label DEVICE [LABEL]
    
  3. findfs:查找分区

findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
  1. tune2fs: 重新设定 ext 系列文件系统可调整的参数值

    常用选项:

    -l         # 查看指定文件系统超级块(super block)信息
    -L 'LABEL' # 修改卷标
    -m #       # 修改预留给管理员的空间百分比
    -j         # 将 ext2 升级为 ext3
    -O         # 文件系统属性启用或禁用,例如,'-O ^has_journal'
    -o         # 调整文件系统的默认挂载选项,例如,'-o ^acl'
    -U UUID    # 修改 UUID 的值
    
  2. dumpe2fs:显示 ext 文件系统信息,将磁盘块分组管理

    常用选项:

    -h # 查看超级块信息,不显示分组信息

  3. xfs_ifo:显示挂载或已挂载的 xfs 文件系统信息

    xfs_ifo mountpoint | devname
    

在 CentOS 6 上默认创建文件系统时,有些特性没有指定,例如,acl 默认没有。

文件系统检测和修复

文件系统故障常发生于死机或者非正常关机之后,文件系统被标记为 “no clean”。

注意:一定不要在挂载状态下执行以下命令进行修复。

  1. fsck:File System Check。注意文件类型要与实际的文件系统一致。

    fsck.FS_TYPE
    fsck -t FS_TYPE
    

    常用选项:

    -a           # 自动修复
    -r           # 交互式修复错误
    
  2. e2fsck:ext 系列文件专用的检测修复工具

    -y          # 自动回答为 yes
    -f          # 强制修复
    -p          # 自动进行安全的修复文件系统问题
    
  3. xfs_repair:xfs 文件系统专用的检测修复工具

    -f          # 修复文件
    -n          # 只检查
    -d          # 允许修复只读的挂载设备,在单用户下修复 '/' 时使用,然后使用 reboot
    

    单用户说明设备不会有其他人使用。并且根目录 / 不能取消挂载。

挂载

分区创建文件系统后需要挂载才能访问。与 windows 不一样的是,Linux 只有一个根,因此需要挂载。

挂载点(mountpoint)就是一个目录,但是如果该目录已有文件在其中,如果进行了挂载,挂载后这些文件就看不到了,只有在取消挂载后才会出现。

同一个设备可以挂载在不同的目录,好像是一个房间有几个门一样,可以使用 mount 命令可见这两个挂载,在 df, lsblk 中不可见第二个挂载。

如果一个挂载点挂载了两个设备,则这个挂载点只能访问第二个挂载的设备。虽然在 mount 命令中可以看到两次挂载。此时,如果把第二个挂载取消,这时第一个挂载就能起作用。

mount 命令

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
  1. device:指明要挂载的设备
  • 设备文件:例如,/dev/sda5
  • 卷标 :-L 'LABEL'
  • UUID :-U UUID
  • 伪文件系统名称:proc, sysfs, devtmpfs, configfs
  1. mountpoint:挂载点即目录必须事先存在,建议使用空目录

  2. mount 常用选项

-t vsftype      # 指定要挂载的设备上的文件系统类型
-r              # readonly,只读
-w              # read and write,可读写
-n              # 不更新 '/etc/mtab',使用 'mount' 查询时不可见
-a              # 自动挂载所有支持自动挂载的设备(定义在 '/etc/fstab' 文件中,且指定了 'auto' 功能)
-L 'LABEL'      # 以指定的便签来挂载
-U 'UUID'       # 以 'UUID' 指定要挂载的设备
-B, --bind      # 绑定目录到另一个目录上

-o options      # 挂载文件系统指定的选项,多个选项之间使用逗号分隔
    async         # 异步模式,即内存中的内容改变时,先写入缓存区,再写入磁盘中
    sync          # 同步模式,即内存中的内容改变时,同时写入磁盘中
    atime/noatime # 记录访问时间,对目录和文件都有效
    diratime/nodiratime # 目录的访问时间戳
    auto/noauto   # 是否支持开机自动挂载,是否支持 '-a' 选项
    exec/noexec   # 是否支持在文件系统上运行应用程序
    dev/nodev     # 是否支持在此文件系统上使用设备文件
    suid/nosuid   # 是否支持 'suid' 和 'sgid' 选项设置
    remount       # 支持重新挂载
    ro            # readonly
    rw            # 读写,默认启用
    user/nouser   # 是否允许普通用户挂载此设备,'/etc/fstab' 使用
    acl|noacl     # 启用禁用 acl 功能
    loop          # 启用 loop 设备
    _netdev       # 当网络可用时才对网络资源进行挂载,例如,NFS 文件系统
    defaults      # 相当于 'rw, suid, dev, exec, auto, nouser, async'

已经挂载的设备,如果想要修改某些特性,可以使用以下命令格式,不需要取消挂载后重新挂载:

mount -o remount, ro /mnt/device

把一个目录挂载到另一个目录,使用:

mkdir /mnt/etc; mount --bind /etc/ /mnt/etc

这时,这两个目录之间并没有硬链接或软链接。

loop 设备就是一个文件挂载上去

# 生成一个文件
]# dd if=/dev/zero of=/data/loop.img bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.902876 s, 116 MB/s

# 创建文件系统
]# mkfs.ext4 /data/disk.img
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 102400 1k blocks and 25688 inodes
Filesystem UUID: 47468748-15f8-4622-9992-f71b030b0142
Superblock backups stored on blocks:
	8193, 24577, 40961, 57345, 73729

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
# 查看
]# blkid /data/loop.img
/data/loop.img: UUID="47468748-15f8-4622-9992-f71b030b0142" BLOCK_SIZE="1024" TYPE="ext4"

# 挂载此文件
]# mkdir /mnt/loop
]# mount /data/disk.img /mnt/loop

# 查看到以下 /dev/loop0 是新增的
# 其过程是新给文件分配一个文件名 /dev/loop0,然后再挂载
]# ll /dev/loop*
brw-rw----. 1 root disk  7,   0 Dec  7 13:57 /dev/loop0
crw-rw----. 1 root disk 10, 237 Dec  7 13:57 /dev/loop-control

]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          980940       0    980940   0% /dev
tmpfs             998404       0    998404   0% /dev/shm
tmpfs             998404    8900    989504   1% /run
tmpfs             998404       0    998404   0% /sys/fs/cgroup
/dev/sda2      102687672 2103336  95325072   3% /
/dev/sda1         588352  141492    403852  26% /boot
/dev/sda3       51343840   57752  48648264   1% /data
tmpfs             199680       0    199680   0% /run/user/0
/dev/loop0         95054    1550     86336   2% /mnt/loop

# 可以看到具体信息
]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE      DIO LOG-SEC
/dev/loop0         0      0         1  0 /data/loop.img   0     512

# 如果我们在这个分区中,复制或创建文件,然后可以把 '/data/loop.img'
# 拷贝到其它电脑,并挂载就可以访问这些文件了。

在 CentOS 6 中只有 8 个 loop 设备可挂载。CentOS 7 以后,则没有限制,实时生成,编号自增。

umount 命令

取消挂载时,可使用设备,也可以使用挂载点。注意,如果在对应的设备内部,这时不能取消挂载该设备,需要离开后才能操作。如果自己不在里面,也显示 ‘target is busy’,说明有其它用户在使用。

umount device|mountpoint

查看挂载情况

挂载后就可以使用以下命令进行查看

# 查看 '/etc/mtab' 文件显示当前已挂载的所有设备
mount

# 查看内核追踪到的已挂载的所有设备
cat /proc/mounts

# 查看文件系统的情况
df -T

查看目录是否为挂载点

findmnt mountpoint|device
echo $?

查看正在访问指定文件系统的进程

lsof mountpoint
fuser -v mountpoint

终止所有正在访问指定文件系统的进程

fuser -km mountpoint

持久挂载

将需要在开机时进行挂载的配置到 /etc/fstab中,该文件的帮助,可以查询:

man 5 fstab

文件中每一行都定义一个要挂载的文件系统,其中包括 6 项内容。

  1. 挂载的设备或伪文件系统

    设备文件可以使用,便签 LABEL="",UUID UUID=""
    伪文件系统名称:proc, sysfs

  2. 挂载点:必须事先存在的目录

  3. 文件系统类型:ext4, xfs, iso9660, nfs, none

  4. 挂载选项:defaults, acl, bind

  5. 转储频率:0 表示不做备份, 1 表示每天转储, 2 表示隔天转储

  6. 该选项用于 fsck 检查文件系统健康时的顺序:0 表示不自检,1 表示首先自检,一般只有在 ‘rootfs’ 采用, 2表示非 ‘rootfs’ 使用

如果对该文件进行了修改,可以先进行以下命令,一方面使修改起效,也可以检查一下是否有错误。

mount -a

这个命令对于已经挂载的分区不起作用,这时可以先进行取消挂载,然后再执行该命令。

如果无法取消挂载,例如,根目录,可以使用以下选项:

mount -o remount /path/to/mountpoint

可以使用以下命令生成新的 UUID

uuidgen

在取消挂载后,可以使用新的 UUID 号。

tune2fs -U "`uuidgen`"

在 CentOS 7 及以上,这时由于分区的 UUID 进行了修改,而在 fstab 文件中数据没有修改,此时如果重启系统,就会出现一些警告信息。这时可以输入 root 密码进入系统,可以先对文件的相应行进行注释(这时的挂载时可读写的)。然后重启后进行修改。

在 CentOS 6 中,如果由于 fstab 配置有误,就会造成除了根目录以外的其它目录都不能正常挂载。进入系统后,通过 cat /proc/mounts 才能显示出根目录的挂载选项时只读,因此不能对文件进行修改。此时需要 mount -o remount, rw /,然后才能修改文件,把该分区配置行的最后项设置为 0,或者注释该行,这时重启时就不会开机检查,可以正常开机,但是不能正常挂载此分区。

可以通过以下命令找出当前的分区 UUID。

blkid

注意:对于 loop 设备的挂载的配置,不能使用 UUID 来指明文件,因为文件太多,系统开机时不会去扫描非设备文件。这时只能使用完整路径来指定对应的文件。而分区内记录着该分区的 UUID

dd if=/dev/zero of=/data/disk.img bs=1M count=100
mkfs -t xfs /data/disk.img
mount /data/disk.img /mnt/disk

但是在 CentOS 6 中需要指明选项才能挂载这种 loop 文件。

mount -o loop /data/disk.img /mnt/disk

因此,在CentOS 6 中的 fstab 配置文件中需要指明选项 loop

在挂载普通目录时,配置文件中的文件系统类型需要指定为 none,选项指定为 bind

示例:对于 loop 设备和目录挂载的配置写法。

/disk.img     /data/disk    xfs   defaults       0 0
/etc          /mnt/etc      none  bind           0 0

# CentOS 6

/disk.img     /data/disk    xfs   defaults,loop  0 0

处理交换文件和分区

swap 交换分区是系统 RAM 的补充,swap 分区支持虚拟内存。

注意:为了优化性能,可以将 swap 分布存放,或者使用高性能磁盘。

使用以下命令可以查看内存的使用情况,包含 swap 的情况。

# CentOS 6
free -h
            total          used        free        shared       buffers     cached
Mem:         979M          279M        699M          244K           18M       161M
-/+ buffers/cache:          99M        879M
Swap:        2.0G            0B        2.0G

其中 ‘shared’ 表示共享,‘buffers’ 表示缓冲区,‘cached’ 表示缓存区。缓冲区是内存的一部分,这些空间用于缓冲输入和输出的数据。缓存区主要目的是把一些数据暂时保存起来,以便更快地读取。缓冲区就好像是生活中的各种排队,缓存区就好像是一些经常使用的资料放在手边,便于使用。真正占用的空间只有 ‘99M’。

# CentOS 7, 8
free
                total         used      free   shared     buff/cache    Available
Mem:           995748       124392    727892     7776         143464       724352
Swap:         2097148            0   2097148
官方推荐的系统 swap 空间大小:
RAM大小推荐 swap 空间允许休眠 swap 空间
< 2GB2倍RAM3倍RAM
2 ~ 8GB1倍RAM2倍RAM
8 ~ 64GB4GB~0.5倍RAM1.5倍RAM
> 64GB独立负载(至少4GB)不建议开启休眠
交换分区实现原理
  1. 创建交换分区或者文件
  2. 使用 mkswap 写入特殊的签名
  3. /etc/fstab 文件中添加适当的配置
  4. 使用 swap - 激活交换空间

启用 swap 分区:

swapon [option]... [device]

选项:

-a           # 激活所有的交换分区
-s           # 查看当前交换分区的情况
-p PRIORITy  # 指定优先级,也可以在 '/etc/fstab' 中的第 4 列指定 'pri=value'

禁用 swap 分区:

swapoff [option]... [device]

可以使用以下命令查看交换分区的情况:

lsblk -f

如果想要增加交换分区空间,可以使用 fdisk /dev/sdc 创建新的分区,调整分区类型为 82,并使用 mkswap 创建对应的分区的文件系统,加入其中即可 swapon -a。想要永久有效,需要在 fstab 中新增一条记录。

类似于:

vim /etc/fstab
# 修改对应的记录
UUID=3929929-cd...  swap     swap  defaults   0  0

# 并入新增的交换分区
swapon -a

查看交换分区的情况

swapon -s
# 等价于
cat /proc/swaps

如果使用的机械硬盘,最好使用新的硬盘的第一个分区,其速度要快点。当然,最好使用固态硬盘。

也可以使用文件当成交换分区

dd if=/dev/zero of=/data/swap.img bs=1G count=1
chmod 600 /data/swap.img
mkswap /data/swap.img
swapon -a

当然,也可以在 /etc/fstab 进行配置,但是第一项需要使用完整文件名。

使用这种文件当成分区,由于访问时需要进过文件所在的分区,效率比直接使用交换分区慢。

swap 优先级

swap 的优先级取值范围为:0 ~ 32767,值越大优先级越高。

如果用户没有指定优先级,则核心自动给 swap 指定一个优先级,其值从 -1 开始,每增加一个自动分配的优先级的交换分区,其优先级减去 1

想要修改已经设置好的优先级,可以修改配置文件,在选项位置进行配置:

类似于:

vim /etc/fstab
# 修改对应的记录
/dev/sdc1      swap        swap     pri=10   0 0

# 禁用对应的分区
swapoff /dev/sdc1

# 激活所有交换分区
swapon -a
# 查看
swapon -s
swap 的使用策略

/proc/sys/swappiness 的值决定了内存被使用了一定的百分比例时,就会启用 swap 分区。

这个值在不同的版本中可能不一样,在 CentOS 8 中:

]# cat /proc/sys/swappiness
30

这个值含义是:使用内存达到 100-30=70% 时候,就开始使用交换分区。如果设置为 0,则会最大限度不使用交换分区,必要时还是要使用的。

修改的方法是:

]# echo 0 > /proc/sys/swappiness
0

一般来说,实际工作中虚拟机上的服务器不使用交换分区。

移动介质

所有的移动设备都需要经过挂载后才能使用,挂载点通常在 /media /mnt 下,访问前必须要挂载,取出前,必须要卸载。

按照默认的设置,普通用户只能挂载的设备有:光盘、DVD、软盘、USB等。

使用光盘

在图形环境中,自动启动挂载于 /run/media/<user>/<label>

如果系统中已经安装了 autofs 包,并启用该服务,而光盘已经连接,则访问 /misc/cd 时,会自动挂载光盘,不访问时不挂载。

手工挂载使用以下命令,不同版本的光盘表示不一样,而 /dev/cdrom 是一个软连接:

mount -r /dev/cdrom /mnt

操作光盘:

eject       # 弹出光盘
eject -t    # 吸入光盘

# 下载的iso镜像,可以挂载后使用
mount -r xxx.iso /mnt        # 如果 CentOS 6 需要加 选项 -o loop

创建 ISO 文件:

cp /dev/cdrom /data/CentOS8.iso
# 也可以
mkisofs -r -o /data/etc.iso /etc

刻录光盘:

wodim -v -eject CentOS8.iso
USB 介质

查看 USB 设备是否识别,可能需要安装 usbutils

lsusb

内核自动探测 SCSI 设备,一般指定成 /dev/sda#, /dev/sdb# 或类似的设备文件。在图形环境中自动挂载于 /run/media/<user>/<label>

手动挂载:

mount /dev/sdx# /mnt

如果在 windows 中的虚拟机上的 Linux 设别插入的优盘,可能需要在虚拟机右下角右键点击相应的图标。但是默认 Linux 不能设别 ‘NTFS’ 格式,如果想要通用,可以把优盘格式化为 ‘vfat’,可能需要安装 ‘dosfstools’ 包。

如果想要取出优盘,可以使用以下命令,确保数据都写入:

dnf -y install dosfstools
mkfs.vfat /dev/sdd1
mount /dev/sdd1 /mnt

# 取出前确保缓存数据写入
sync
sync
umount /mnt

硬件使用会留下日志:

tail -f /var/log/messages

dmesg

磁盘常见工具

文件系统空间占用信息的查看工具 df
df [option]... [FILE]...

常见选项:

-H      # 以 10 为单位
-T      # 文件系统类型
-h      # 更友好的大小
-i      # 显示 inode 信息
-p      # 以 posix 兼容的格式输出,显示更整齐,特别是有些行比较长时

也可以使用

lsblk -f
查看目录占用空间信息 du
du [option]... DIR

常用选项:

-h              # 更友好的大小单位
-s              # 统计值 summary
--max-depth=N   # 指定最大目录层级N
工具 dd

格式:

dd if=/path/to/SRC of=/path/to/DEST bs=N1 count=N2

常用选项:

if=file         # 从 'file' 中读取
of=file         # 数据写到指定的文件中
ibs=size        # 一次性读入 'size' 大小字节
obs=size        # 一次写入 'size' 大小字节
bs=size         # 指定块大小
cbs=size        # 一次转化 'size' 大小字节
skip=blocks     # 源文件中跳过指定额块大小
seek=blocks     # 目标文件中搜索跳过的指定位置
count=Number    # 复制 'Number' 个 'bs'
conv=conversion[, conversion...]    # 使用指定的参数转换文件

conversion 转换参数:
ascii     转换 EBCDIC 为 ASCII
ebcdic    转换 ASCII 至 EBCDIC
lcase     转换为小写字符
ucase     转换为大写字符
nocreat   不创建输出文件
noerror   出错时不停止
notrunc   不截断输出文件
sync      把每个输入块填充到 ibs 字节中,不足部分使用空(NUL)字符补齐
fdatasync 在写完成前,物理写入输出文件

示例:

  • 备份 sdx 整盘备份到 sdy:

    dd if=/dev/sdx of=/dev/sdy
    
  • 将 sdx 整盘数据备份到指定的文件中:

    dd if=/dev/sdx of=/path/to/image
    
  • 备份并压缩全盘数据

    dd if=/dev/sdx | gzip > /path/to/image.gz
    
  • 将备份文件恢复到指定磁盘

    dd if=/path/to/image of=/dev/sdx
    
    gzip -dc /path/to/image.gz | dd of=/dev/sdx
    
  • 拷贝光盘数据至指定的目录下,并保存为 cdrom.iso 文件

    dd if=/dev/cdrom of=/root/cdrom.iso
    
  • 销毁磁盘数据

    dd if=/dev/urandom of=/dev/sda1
    # 或者
    dd if=/dev/zero of=/dev/sda1
    
  • 通过比较执行时间,确定系统最佳的 block size 大小

    dd if=/dev/zero of=/root/1GB.file bs=1024 count=1000000
    dd if=/dev/zero of=/root/1GB.file bs=2048 count=500000
    dd if=/dev/zero of=/root/1GB.file bs=4096 count=250000
    
  • 测试硬盘写速度

    dd if=/dev/zero of=/root/1GB.file bs=1024 count=1000000
    
  • 测试硬盘度速度

    dd if=/root/1GB.file bs=64k | dd of=/dev/null
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值