认识Linux系统
磁盘组成与分区
磁盘中以扇区为最小单位。
磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区 表。
MBR 分区表中,第一个扇区最重要,里面有:
(1)主要开机区(Master boot record, MBR)及分区表 (partition table), 其中 MBR 占有 446 Bytes,而 partition table 则占有 64 Bytes。
(2)GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。
/dev/sd[a-p][1-128]:为实体磁盘的磁盘文件名
/dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名
文件系统特性
在磁盘分区之后都要进行格式化(format)之后才能使用,这是因为文件系统都有不同的格式和类型。
文件系统通常会将两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,实际数据则放置到 data block 区块中。
还有一个超级区块 (superblock) 会记录整个文件系 统的整体信息,包括 inode 与 block 的总量、使用量、剩余量
- superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码
- block:实际记录文件的内容,若文件太大时,会占用多个block
inode
- 该文件的存取模式(read/write/excute)
- 该文件的拥有者与群组(owner/group)
- 该文件的容量;
- 该文件创建或状态改变的时间(ctime)
- 最近一次的读取时间(atime); 最近修改的时间(mtime)
- 定义文件特性的旗标(flag),如 SetUID...
- 该文件真正内容的指向 (pointer)
inode 的数量与大小也是在格式化时就已经固定了
- 每个 inode 大小均固定为 128 Bytes (新的 ext4 与 xfs 可设置到 256 Bytes)-
- 每个文件都仅会占用一个 inode 而已
承上,因此文件系统能够创建的文件数量与 inode 的数量有关; 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与使用者是否符合,若符合才能够开始 实际读取 block 的内容。
与目录树的关系
创建目录时,系统会给目录分配一个inode和至少一个block,inode中存的时目录的相关权限和属性,而block中存的是文件名和文件对应的inode号
XFS日志式文件系统
xfs主要规划为三个部分,一个数据区 (data section)、一个文件系统活动登录区 (log section)以及一个实时运行区(realtime section)。
磁盘分区、格式化、检视与挂载
观察磁盘分区的状态: lsblk列出系统上的所有磁盘列表
参数选项
-d :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f :同时列出该磁盘内的文件系统名称
-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
-m :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
-p :列出该设备的完整文件名!而不是仅列出最后的名字而已。
-t :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等
[root@lx:~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─klas-root 253:0 0 46.9G 0 lvm /
└─klas-swap 253:1 0 2.1G 0 lvm [SWAP]
sdb 8:16 0 500G 0 disk
sr0 11:0 1 4.3G 0 rom
- NAME:就是设备的文件名啰!会省略 /dev 等前导目录!
- MAJ:MIN:其实核心认识的设备都是通过这两个代码来熟悉的!分别是主要:次要设备代码!
- RM:是否为可卸载设备 (removable device),如光盘、USB 磁盘等等
- SIZE:当然就是容量啰!
- RO:是否为只读设备的意思
- TYPE:是磁盘 (disk)、分区 (partition) 还是只读存储器 (rom) 等输出
- MOUTPOINT:挂载点!
blkid 列出设备的 UUID 等参数
[root@lx:~]#blkid
/dev/mapper/klas-swap: UUID="0ade10c9-40f6-4d2a-8e1d-934474800604" TYPE="swap"
/dev/sr0: BLOCK_SIZE="2048" UUID="2023-03-31-21-06-57-00" LABEL="Kylin-Server-10" TYPE="iso9660"
/dev/mapper/klas-root: UUID="6cac1d1f-35b0-40b9-af73-c1d3243e7e19" BLOCK_SIZE="512" TYPE="xfs"
/dev/sda2: UUID="hgK3Rb-yiU1-f43o-lT7c-FatC-NLYl-2Gvdpi" TYPE="LVM2_member" PARTUUID="1873d1e8-02"
/dev/sda1: UUID="f32340b3-19ad-400e-b731-a9edca312394" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="1873d1e8-01"
parted 列出磁盘的分区表类型与分区信息
[root@lx:~]#parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 53.7GB 52.6GB primary lvm
磁盘分区工具gdisk/fdisk
在分区管理中,使用不同的工具(如 fdisk 和 gdisk)来处理 MBR(主引导记录)和 GPT(GUID 分区表)主要是因为这两种分区格式的结构和实现方式存在显著差异。以下是对这两个工具及其适用范围的详细说明:
MBR 和 GPT 分区格式
-
MBR(主引导记录)
- 由 BIOS 使用的一种较旧的分区格式。
- 最大支持 2TB 的单个分区。
- 最多支持 4 个主分区,或 3 个主分区 + 1 个扩展分区。
- 分区信息存储在硬盘的前 512 字节中,包括主引导记录。
-
GPT(GUID 分区表)
- 由 UEFI 使用的现代分区格式。
- 最大支持 9.4ZB 的单个分区(理论上)。
- 支持多达 128 个分区(具体数量取决于实现)。
- 包含冗余的分区表,分为主 GPT 表和备份 GPT 表,增加了数据的安全性。
工具差异
-
fdisk- 是用来管理 MBR 分区表的实用程序。
- 不支持 GPT 分区表,仅能处理传统的 MBR 格式。
-
gdisk- 是 GNU 的 GPT fdisk 工具,专门用来管理 GPT 分区表。
- 提供了一个类似于
fdisk的界面,但功能和支持的分区格式不同。
使用parted进行分区
格式化磁盘
mkfs.xfs,格式化的速度超级快,必须格式化磁盘才能使用
开机自动挂载
/etc/fstab或者/etc/rc.local
在 Linux 系统中,挂载磁盘的方式通常取决于磁盘的类型和挂载的需求。以下是一些基本的原则和建议:
/etc/fstab
/etc/fstab 文件是用于在系统启动时自动挂载文件系统的配置文件。适合在此文件中挂载的类型包括:
- 常用磁盘分区:例如,根分区 (
/)、用户分区 (/home)。 - 网络文件系统:例如 NFS、CIFS。
- 外部存储设备:如 USB 驱动器和其他类型的存储设备,只要你希望在每次启动时都挂载它们。
示例:
/dev/sda1 / ext4 defaults 0 1
/dev/sdb1 /data ext4 defaults 0 2
/etc/rc.local
/etc/rc.local 是一个脚本文件,可用于在系统启动时执行任意命令。这种方法适用于以下场景:
- 动态或特殊情况下的挂载:你需要根据条件决定是否挂载的文件系统。
- 不需要在启动时自动挂载但需要在系统运行后挂载的文件系统。
- 需要执行额外命令:比如挂载之后执行特定的操作。
示例:
#!/bin/bash
mount /dev/sdb1 /mnt/external_drive
选择建议
- 如果你的挂载是静态且较为标准的(例如大多数用户的文件夹),建议使用
/etc/fstab。 - 如果你需要在特定条件下挂载或需要执行其他命令,建议使用
/etc/rc.local。
总的来说,最佳实践是尽可能使用 /etc/fstab 进行挂载配置,以保持系统的一致性和简洁性。
mount -a
mount [-l]
mount [-t 文件系统] LABEL='' 挂载点
mount [-t 文件系统] UUID='' 挂载点
mount [-t 文件系统] 设备文件名 挂载点
选项与参数:
-a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
-t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4, reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运行。 但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
-o :后面可以接一些挂载时额外加上的参数!比方说帐号、密码、读写权限等:
async, sync: 此文件系统是否使用同步写入 (sync) 或非同步 (async) 的 内存机制,请参考文件系统运行方式。默认为 async。
atime,noatime: 是否修订文件的读取时间(atime)。为了性能,某些时刻可使用 noatime ro, rw: 挂载文件系统成为只读(ro) 或可读写(rw)
auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
dev, nodev: 是否允许此 filesystem 上,可创建设备文件? dev 为可允许
suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?
exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?
user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说, mount 仅有 root 可以进行,但下达 user 参数,则可让 一般 user 也能够对此 partition 进行 mount 。
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!
# Device Mount point filesystem parameters dump fsck
/dev/mapper/centos-root / xfs defaults 0 0 UUID=94ac5f77-cb8a-495e-a65b-2ef7442b837c
/boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
第一栏Device:要挂载的设备 第二栏Mount point:挂载点 第三栏filesystem:文件系统类型 第四栏parameters:挂载参数一般为默认 第五栏dump:能否被 dump 备份指令作用 第六栏fsck:是否以 fsck 检验扇区
swap内存交换空间
第一步:使用gdisk创建一个swap的空间
第二步:创建swap格式,mkswap /dev/xxx
第三步:swapon /dev/xxx 载入
以文件创建swap分区
步骤一:使用dd创建一个自定义大小的文件
dd if=/dev/zero of=/tmp/swap bs=1M count=128
步骤二:mkswap 格式化文件
步骤三:载入swapon
步骤四:swapoff关闭swap的挂载