Skip to content

Linux 文件管理系统

常见文件系统

linux 默认文件系统 Ext2, Ext3, Ext4,除此之外,还有 xfs,swap(交换分区文件系统), NFS(网络文件系统),iso9660(光盘标准文件系统),fat(windows下 fat16),vfat(windows 下 fat32),NTFS(Windows 下 NTFS),ufs,proc(基于内存的虚拟文件系统,用来管理 /proc),sysfs(基于内存的虚拟文件系统,用来管理 /sysfs),tmpfs。

Linux 识别硬盘设备和分区

Linux 初始化时,DOS 根据 MBR(Master Boot Record)识别硬盘设备。MBR 前 446 B 是 boot loader 程序,之后 64 字节是 partition table(分区表),每个表项 16 B,因此若要在一个硬盘上划分出超过 4 个分区时,需要先划扩展分区。(IDE 硬盘最多 63 分区,SCSI 最多 15 分区)

分区目的:

  1. 方便管理
  2. 提高系统效率
  3. 使用磁盘配额的功能限制用户使用的磁盘量
  4. 便于备份和恢复

查看文件系统硬盘使用情况

使用 df 命令,主要是从各文件系统的 Super block 中读取数据。

  • -h:习惯单位;
  • -a:所有文件系统,包括特殊文件系统,如 proc、sysfs,这些文件系统大多是基于内存的虚拟文件系统,在内存中而不占用磁盘空间
  • -T:显示文件系统类型
  • -i:以 inode 数量显示容量

df -h:用习惯单位显示系统所有文件系统信息

df -h <path>:用习惯单位显示 path 所在分区的文件系统信息

统计目录或文件所占磁盘空间大小

使用 du 命令,统计目录真正磁盘占用大小。

  • -h:习惯单位;
  • -s:只统计总磁盘占用

挂载 Linux 系统外的文件

mount 列出系统中已挂载设备信息。

mount [-t filesystem_type] [-L label] [-o opt1[,opt2,...]] device mountpoint

-t 指定文件系统类型,不指定系统自动检测,-L 通过卷标名进行挂载,-o 指定挂载额外选项:

  • rw/ro:读写权限;
  • async/sync:异步/同步写入;
  • dev/nodev:是否允许从 block 文件中读取数据;
  • auto/noauto:是否允许以 mount -a 的方式挂载;
  • suid/nosuid:是否拥有 SetUID 和 SetGID 权限;
  • exec/noexec:是否允许可执行文件;
  • user/nouser:是否允许让普通用户使用 mount 挂载;
  • defaultrw,async,nodev,auto,suid,exec,nouser
  • remount:重新挂载

例:

mkdir /mnt/disk1   # 建立挂载点
mount /dev/sdb1 /mnt/disk1  # 挂载分区

挂载U盘

fdisk -l # 查看所有磁盘信息(包括 U 盘),可查看 U 盘文件名
mkdir /mnt/usb  # 建立挂载点
mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb # 挂载一个 Windows fat32 分区的 U 盘
cd /mnt/usb/  # 进入挂载点访问 U 盘数据

开机自动挂载硬件设备

Linux 通过 /etc/fstab 配置文件来确定开机时哪些硬盘需要挂载。该文件仅 root 用户可写。

文件中字段含义:

  1. 分区设备名/UUID:UUID 是一个 128 bit 的数字,由系统自动生成和管理,使用 UUID,在分区顺序改变或内核升级后,仍然保证分区正确加载。查看挂载点的链接文件名 ls -l /dev/disk/by-uuid,也可用 blkid
  2. 挂载点位置
  3. 文件系统名称
  4. 挂载参数
  5. 是否被 dump 备份(0 不备份,1 备份,2 不定期备份)
  6. 是否被 fsck 检测(0 不检测,其他是优先级,越小越高)

卸载文件系统

umount 命令用于卸载已经挂载的硬件设备,

检测和修复文件系统

fsck 命令用于检查文件系统。此命令只有 root 用户且文件系统出现问题时才使用,否则正常状况下使用 fsck 命令,可能会损坏系统。

使用 fsck 命令修改文件系统时,该文件系统对应的磁盘分区一定要处于卸载状态。

查看文件系统信息

dumpe2fs [-h] file_name 命令查看 ext 文件系统详细信息,-h 仅累成 superblock 数据信息。

tune2fs -l file_name 命令也可查看 ext 文件系统信息,信息更加友好。

给磁盘分区

fdisk 命令可用来磁盘分区。

fdisk -l 列出系统分区。

fdisk device_filename 用于给磁盘分区,输入该命令后进入交互界面,输入 m 获取帮助,

创建分区过程

运行 fdisk device_filename 后进入交互界面:

  1. 使用 o 创建 DOS 的 MBR 分区表(不推荐),g 创建 GPT 分区表。
  2. n 创建新分区。(后输入 p 创建主分区,输入 e 创建扩展分区);然后输入分区号;输入分区起始组柱面;指定磁盘大小。
  3. w 写回并退出,q 退出不保存

格式化分区

分区完成后,需要格式化,mkfs [-t type] device 命令可对硬盘分区进行格式化,使用 -t type 设置分区的文件系统。mkfs 不能调整分区默认参数,若要调整,使用 mke2fs

mke2fs 参数:

  • -t type 指定文件系统
  • -b block-size 指定 block 大小
  • -i bytes-per-inode 指定多少字节分配一个 inode
  • ……

若无特殊需要,用 mkfs 就够了。

建立 swap 分区

Linux 中用作虚拟内存的磁盘空间被称为 swap 空间。步骤如下:

  1. 分区
  2. 格式化,使用 mkswap 命令把分区格式化为 swap 分区
  3. swap 分区使用:
    • free 命令查看内存和 swap 分区使用情况

LVM 逻辑卷管理机制

LVM 是 Logical Volume Manager 简称。建立 LVM 步骤如下:

  1. 物理磁盘分为分区
  2. 物理分区建立为物理卷(PV)
  3. 物理卷整合为卷组(VG)
  4. 卷组划分为逻辑卷(LV)

物理卷 PV

首先使用 fdisk 命令将物理磁盘分区。

然后使用 pvcreate device 命令将磁盘/分区建立为物理卷。

若要删除物理卷,则使用 pvremove device 命令删除(删除前需要先将物理卷从卷组中删除)。

使用 pvscan 命令查看系统中哪些磁盘是物理卷。pvdisplay 可查看更详细信息。

卷组 VG

使用 vgcreate [-s PE_size] vg_name pv_name1 [pv_name2] 命令建立卷组(PE_size 设置 PE 大小,若不指定默认 4MB)。

使用 vgextend vg_name pv_name 向卷组添加物理卷,vgreduce vg_name pv_name 删除物理卷,vgremove vg_name 删除卷组。

vgscan vgs vgdisplay 查看信息。

逻辑卷 LV

使用 lvcreate [-L vg_size] [-n lv_name] vg_name 建立逻辑卷。建立逻辑卷后,还需格式化和挂载后才能使用。逻辑卷的设备文件名是 /dev/vg_name/lv_name。

lvresize -L new_size lv_name 调整逻辑卷大小。修改后虽然逻辑卷大小改变了,但是要使用 resize2fs 命令来调整分区大小,才能让新分区大小也改变。

  • 若是要增加分区大小,首先 lvresize 增加逻辑卷大小,然后 resize2fs 调整对应分区大小。
  • 若要减少分区大小,首先 umount 取消分区挂载, e2fsck -f 检查分区完整性,然后 resize2fs 调整分区大小,mount 重新挂载分区,最后 lvresize 减少 LV 大小。

lvscan lvdisplay 查看信息。

LVM 删除

按卸载分区,然后删除 LV,VG,PV 的顺序:

  • umount 卸载分区
  • lvremove 删除逻辑卷
  • vgremove 删除卷组
  • pvremove 删除物理卷卷标

RAID 磁盘阵列

RAID(Redundant Arrays of Inexpensive Disks)

  • RAID 0,又叫带区卷,多块相同容量磁盘块,循环存储。
  • RAID 1,又叫镜像卷,两块磁盘,冗余存储。
  • RAID 5,在 RAID 1 的基础上添加校验值,至少需要三个磁盘块。

步骤:

  1. 建立分区
  2. mdadm 命令创建 RAID
  3. 格式化并挂载
  4. 建立 mdadm 配置文件(/etc/mdadm.conf
  5. 修改 /etc/fstab 设置开机自动挂载