文件系统管理

回顾分区和文件系统

  • 分区类型
    • 主分区:总共最多只能分四个
    • 扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。
    • 逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘 Linux最多支持11个逻辑分区
  • 文件系统
    • ext2:是ext文件系统的升级版本,RedHat
      Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件
    • ext3:ext3文件系统是ext2文件系统的级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和最大2TB的文件
    • ext4:它是ext3文件系统的升级版.ext4在性能、伸缩性和可靠性方面进行了大量改进.EXT4的变化可以说是翻天覆地的,比如向下兼容EXT3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用
      barrier等。是 CentOS6.3的默认文件系统

文件系统常用命令

df命令、du命令、fsck命令和dump2fs命令

文件系统查看命令df

Disk Free

df统计系统的文件占用情况

1
df [选项] [挂载点]

选项:

  • -a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
  • -h 使用习惯单位显示容量,如KB,MB或GB等
  • -T 显示文件系统类型
  • -m 以MB为单位显示容量
  • -k 以KB为单位显示容量。默认就是以KB为单位
1
2
3
4
5
6
7
8
9
df
# Filesystem 1K-blocks Used Available Use% Mounted on
# /dev/sda 25280028 4305836 19673304 18% /
# tmpfs 492028 216 491812 1% /dev/shm

df -h
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda 25G 4.2G 19G 18% /
# tmpfs 481M 216K 481M 1% /dev/shm

du统计目录或文件大小

show disk usage

1
du [选项] [目录或文件名]

选项:

  • -a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
  • -h 使用习惯单位显示磁盘占用量,如KB,MB或GB等
  • -s 统计总占用量,而不列出子目录和子文件的占用量
1
2
3
4
5
6
7
8
9
10
11
cd /
ll -h
#drwxr-xr-x. 73 root root 4.0K Aug 26 08:12 etc
# 发现etc目录只有4K大小 , 这时需要使用du

du -h /etc
# 显示所有子目录占了多大空间

du -sh /etc
# 28M /etc
# 只显示总大小

为什么etc目录只有4K?

因为之后检查etc目录下所有一级子目录和一级子文件的大小,而不会检查他们的数据占了多大

du命令和df命令的区别

  • df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
  • du命令是面向文件的,只会计算文件或目录占用的空间

简单来说 , fd = du + 命令执行时占用的资源

文件系统修复命令fsck

1
fsck [选项] 分区设备文件名

选项:

  • -a:不用显示用户提示,自动修复文件系统
  • -y:自动修复。和-a作用一致,不过有些文件系统只支持-y

此命令是系统自动运行 , 一般不需要我们执行

显示磁盘状态命令 dumpe2fs

1
dumpe2fs 分区设备文件名
1
dumpe2fs /dev/sda

挂载命令

查询与自动挂载

1
2
3
4
5
6
7
8
9
10
11
mount [-l]
# 查询系统中已经挂载的设备,-l会显示卷标名称
# /dev/sda on / type ext4 (rw)
# proc on /proc type proc (rw)
# sysfs on /sys type sysfs (rw)
# devpts on /dev/pts type devpts (rw,gid=5,mode=620)
# tmpfs on /dev/shm type tmpfs (rw)
# none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

mount -a
# 依据配置文件etc/fstab的内容,自动挂载

挂载命令格式

1
mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点

选项:

  • -t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso960等文件系统

  • -L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载(给分区取个名字)

  • -o 特殊选项:可以指定挂载的额外选项
    最常用:

    • remount : 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
    • exec/noexec : 执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec
  • 示例:

    1
    2
    mount -o remount,noexec /home
    # 重新挂载boot分区,并使用 noexec 权限

挂载光盘与U盘

挂载/卸载光盘

光盘的设备文件名是固定的,/dev/cdrom或者 /dev/sr0 . cdrom是sr0的软连接

1
2
3
4
5
6
7
mkdir /mnt/cdrom
# 建立挂载点

mount -t iso9660 /dev/cdrom /mnt/cdrom/
#或者 , 因为cdrom是sr0的软连接
mount /dev/sr0 /mnt/cdrom/
# 把/dev/sr0设备挂载到/mnt/cdrom/目录下

卸载

1
umount 设备文件名或挂载点

示例 :

1
2
3
umount /mnt/cdrom
# 或者
umount /dev/sr0

注意 : 要卸载的时候,必须cd到其他目录下

挂载/卸载U盘

  • 不同于光盘 , U盘的设备文件名不是固定的 , 需要先查看U盘设备文件名
  • U盘的文件系统为vfat
1
2
3
4
5
fdisk -l
# 查看U盘设备文件名

mount -t vfat /dev/sdbl /mnt/usb/
# 将设备/dev/sdbl挂载到/mnt/usb/目录下

注意:Linux默认是不支持NIFS文件系统的

卸载

1
umount /dev/sdb1

支持NTFS文件系统

使用NTFS-3G插件

http://www.tuxera.com/community/ntfs-3g-download/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tar zxvf ntfs-3g_ntisprogs-2013.1.13.tgz
# 解压

cd ntfs-3g_ntfsprogs-2013.1.13
# 进入解压目录

./configue
# 编译器准备。没有指定安装目录,安装到默认位置中

make
# 编译

make install
#编译安装

使用 :

1
mount -t ntfs-3g 分区设备文件名 挂载点

fdik分区

fdisk命令分区过程

  1. 添加新硬盘

  2. 查看新硬盘

    1
    fdisk -l
  3. 使用fdisk命令分区

    1
    fdisk /dev/sdb
  4. 新建分区:

    1
    n
  5. 保存退出:

    1
    w
  6. 重新读取分区表信息:

    1
    partprobe
  7. 格式化分区

    1
    mkfs -t ext4 /dev/sdb1
  8. 建立挂载点并挂载

    1
    2
    3
    4
    # 建立挂载点
    mkdir /disk1
    # 挂载
    mount /dev/sdb1 /disk1/

分区自动挂载

  • 我们上面创建的分区在每次开机的时候都要重新挂载 , 现在学习自动挂载分区

  • 自动挂载本质就是修改/etc/fstab文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    more /etc/fstab
    ## /etc/fstab
    ## Created by anaconda on Wed Mar 1 20:16:06 2017
    ##
    ## 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
    #
    # /dev/sda / ext4 defaults 1 1
    # /dev/sdb swap swap defaults 0 0
    # tmpfs /dev/shm tmpfs defaults 0 0
    # devpts /dev/pts devpts gid=5,mode=620 0 0
    # sysfs /sys sysfs defaults 0 0
    # proc /proc proc defaults 0 0
  • 字段:

    • 第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
    • 第二字段:挂载点
    • 第三字段:文件系统名称
    • 第四字段:挂载参数
    • 第五字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份
    • 第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高
  • 挂载分区只要模仿上面的格式写入/etc/fstab就行了

    1
    /dev/sdb1	 /disk1                       ext4    defaults        1 2
  • ```bash
    mount -a

    依据/etc/fstab配置文件的内容 , 自动挂载

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    所以,我们就可以使用这个命令来检查我们有没有写错

    - `/etc/fstab`是系统的重要文件 , 如果写错了,文件就可以崩了,就需要手动修复此文件



    ### /etc/fstab文件修复

    1. 执行

    ```bash
    mount -o remount,rw /

    命令作用:

    • 分区在挂载失败后没有挂载成读写权限 , 而是挂成 只读权限
    • 该命令的作用就是将此分区重新挂载成读写权限 , 方便后续修改/etc/fstab文件
  1. 修改/etc/fstab文件:

    1
    vim /etc/fstab
  2. 重启:

    1
    reboot