• Linux学习笔记(14)文件系统管理


    1 回顾分区与系统

    (1)分区类型

    Linux的分区一般包括主分区,扩展分区和逻辑分区。其中:

    主分区最多只能分4个

    扩展分区只能有一个,也算作主分区的一种,即主分区加扩展分区最多有4个。但扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用;

    逻辑分区是由扩展分区划分出来的。如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘,Linux最多只能支持11个逻辑分区。

    (2)文件系统

    Linux中常见的文件系统包括ext2,ext3,ext4

    ext2是ext文件系统的升级版本,RedHat Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件。

    ext3是ext2文件系统的升级版本,最大的区别在于增加了日志功能,可以在系统突然停止时提供系统文件系统的可靠性。支持最大16TB的分区和最大2TB的文件。

    ext4是ext3的升级版本。ext4在性能、伸缩性和可靠性方面进行了大量改进。ext4的变化有向下兼容了ext3,最大支持1EB文件系统和16TB文件,无线数量子目录,Extents连续数据块概念,多块分配,延迟分配,持久预分配,快速fsck,日志校验,无日志模式,在线碎片整理,iNode增强,默认启动barrier等。

    2 文件系统常用命令

    (1)df,du,fsck及dumpe2fs命令

    1)df是文件系统查看命令,其格式为:

    df [选项] [挂载点]

    其中,-a选项表示显示所有文件系统信息,包括特殊文件系统如/proc,/syfs等,-h选项表示使用习惯单位显示容量如KB、MB、GB等,-T表示显示文件系统的文件类型,-m选项表示以MB为单位显示容量,-k选项表示以KB为单位显示容量,默认就是以KB为单位

    例:查看本机的文件系统:

    [root@localhost ~]# df -Th
    
    Filesystem     Type     Size  Used   Avail  Use%  Mounted on
    
    /dev/sda5      ext4    14G  2.0G   11G  16%    /
    
    tmpfs          tmpfs  504M     0  504M   0%  /dev/shm
    
    /dev/sda1      ext4   291M   32M  244M  12%  /boot
    
    /dev/sda2      ext4   4.0G  136M  3.7G    4%   /home

    2)du命令用于统计目录或文件的大小,其格式为:

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

    其中,-a选项表示显示每个子文件的磁盘占用量,默认只统计子目录的磁盘统计量,-h选项表示使用习惯单位显示磁盘占用量,-s选项表示统计总占用量,而不是列出子目录和子文件的占用量

    注:ls命令只会统计目录下的第一级子目录及文件的占用空间

    例:使用ls命令和du命令分别统计/etc目录的大小:

    [root@localhost ~]# du -sh /etc/
    
    27M     /etc/
    
    [root@localhost ~]# ls -ld /etc/
    
    drwxr-xr-x. 103 root root 12288 1月  31 05:00 /etc/

    3)df与du命令的区别

    df命令时从文件系统考虑的,不仅考虑文件的占用空间,还要统计被命令或程序占用的空间。最常见的就是文件已经删除,但是程序并没有释放空间。

    du命令是面向文件的,只会计算文件或目录占用的空间。

    例:分别使用df和du显示根目录"/"的大小:

    [root@localhost ~]# df -h /
    
    Filesystem      Size  Used   Avail  Use%  Mounted on
    
    /dev/sda5      14G  2.0G   11G   16%   /
    
    [root@localhost ~]# du -sh /
    
    du: 无法访问"/proc/1597/task/1597/fd/4": 没有那个文件或目录
    
    du: 无法访问"/proc/1597/task/1597/fdinfo/4": 没有那个文件或目录
    
    du: 无法访问"/proc/1597/fd/4": 没有那个文件或目录
    
    du: 无法访问"/proc/1597/fdinfo/4": 没有那个文件或目录
    
    1.9G    /

    4)fsck是文件系统的修复命令,其格式为:

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

    其中,-a选项表示不同显示用户提示,自动修复文件系统,-y选项表示自动修复,和-a的作用一致,不过有些文件系统只支持-y

    5)dumpe2fs命令用于显示磁盘状态命令,其格式为:

    dumpe2fs 分区设备文件名

    例:查看/dev/sda1的磁盘状态,使用-h选项仅显示超级块信息:

    [root@localhost ~]# dumpe2fs -h /dev/sda1
    
    dumpe2fs 1.41.12 (17-May-2010)
    
    Filesystem volume name:   <none>
    
    Last mounted on:          /boot
    
    Filesystem UUID:          0b5697a3-9081-4b75-bf4c-71b4891d5e86
    
    Filesystem magic number:  0xEF53
    
    Filesystem revision #:    1 (dynamic)
    
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
    
    Filesystem flags:         signed_directory_hash
    
    Default mount options:    user_xattr acl
    
    Filesystem state:         clean
    
    …………

    (2)挂载命令

    1)查询与自动挂载

    mount命令用于查询系统中已经挂载的设备,如显示系统已挂载的设备:

    [root@localhost ~]# mount
    
    /dev/sda5 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,rootcontext="system_u:object_r:tmpfs_t:s0")
    
    /dev/sda1 on /boot type ext4 (rw)
    
    /dev/sda2 on /home type ext4 (rw)
    
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

    加上-l选项表示显示卷标名称。加上-a选项则表示依据配置文件/etc/fstab的内容,自动挂载。

    2)挂载命令格式为:

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

    其中,-t选项表示加入文件系统类型来指定挂载的类型,可以为ext3、ext4(针对于Linux)、iso9660(光盘)、fat(win16)、vfat(win32)等文件系统;

    -L选项为卷标名,表示挂载指定卷标的分区,而不是安装设备文件名挂载;

    -o选项为特殊选项,可以指定挂载的额外选项,常见的选项有

    参数

    说明

    atime/noatime

    更新访问时间/不更新。访问分区文件时,是否更新文件的访问时间,默认为更新

    async/sync

    异步/同步,默认为异步

    auto/noauto

    自动/手动,mount –a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动

    defaults

    定义默认值,相当于rw,suid,dwv,exec,auto,nouser,async这七个选项

    exec/noexec

    执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许

    remount

    重新挂载已经挂载的文件系统,一般用于指定修改特殊全乡

    rw/ro

    读写/只读,文件系统挂载时,是否具有读写权限,默认是rw

    suid/nosuid

    具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有

    user/nouser

    允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区

    usrquota

    写入代表文件系统支持用户磁盘配额。默认不支持

    grpquota

    写入代表文件系统支持组磁盘配额,默认不支持

    例:重新挂载/home分区,并使用noexec权限,尝试运行shell脚本helloworld.sh:

    [root@localhost ~]# mount -o remount,noexec /home
    
    [root@localhost ~]# cd /home/
    
    [root@localhost home]# vi helloword.sh
    
    [root@localhost home]# chmod 755 helloword.sh
    
    [root@localhost home]# ./helloword.sh
    
    -bash: ./helloword.sh: 权限不够
    
    [root@localhost home]# ll
    
    总用量 20
    
    -rwxr-xr-x. 1 root root    31 1月  31 06:12 helloword.sh
    
    [root@localhost home]# cp helloword.sh /root/
    
    [root@localhost home]# /root/helloword.sh
    
    hello world!
    
    [root@localhost home]# mount -o remount,exec /home

    可见在/home下设置noexec权限后无法执行shell脚本,而在其他默认的分区中如/root是可以执行的。注意最后要修改回来,否则会影响系统启动。

    (3)挂载光盘和U盘

    1)挂载光盘

    首先在Vmware虚拟机设置中选中挂载的光盘镜像,然后确保“设备状态”处于“已连接”,如下图所示:

     

    其次,在/mnt目录下创建cdrom挂载点,然后挂载光盘,最后显示光盘内容,具体过程如下:

    [root@localhost ~]# mkdir /mnt/cdrom/                  #建立挂载点
    
    [root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/        #挂载光盘
    
    mount: block device /dev/sr0 is write-protected, mounting read-only
    
    [root@localhost ~]# ls /mnt/cdrom/
    
    CentOS_BuildTag Packages    RPM-GPG-KEY-CentOS-Security-6
    
    EULA     RELEASE-NOTES-en-US.html    RPM-GPG-KEY-CentOS-Testing-6
    
    GPL       repodata                    TRANS.TBL
    
    images           RPM-GPG-KEY-CentOS-6
    
    isolinux         RPM-GPG-KEY-CentOS-Debug-6
    
    [root@localhost ~]# umount /mnt/cdrom/               #最后卸载挂载点

    注:挂载点卸载命令umount的格式为:umount 设备文件名或挂载点。

    2)挂载U盘

    光标定位到Vmware虚拟机中,然后插入U盘。这样做U盘将被Linux识别,而不是被Windows识别。

    首先使用fdisk命令查看U盘的设备文件名,具体命令为:fdisk –l。

    其次挂载U盘:mount –t vfat /dev/sdb1 /mnt/usb

    注意:U盘为FAT16文件系统,Linux的挂载文件系统格式为fat,若为FAT32,则Linux对应的挂载文件系统格式为vfat。Linux默认是不支持NTFS文件系统的移动硬盘

    (4)支持NTFS的文件系统

    若要在Linux中挂载NTFS的文件系统,可以利用第三方软件ntfs-3g。其下载地址为:http://www.tuxera.com/community/ntfs-3g-download/

    安装编译的过程如下:

    ①解压缩:tar -xzvf ntfs-3g-ntfsprogs-2014.2.15.tar.gz

    ②进入压缩包:cd ntfs-3g-ntfsprogs-2014.2.15

    ③编译器准备,无需指定安装目录,将被安装到默认的位置中:./confgure④编译:make

    ⑤编译安装:make install

    安装好之后,插入移动硬盘(和U盘的插入方法一样),然后进行挂载:

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

    3 fdisk分区

    (1)fdisk命令的分区过程

    ①使用VMware新建硬盘:

    在“虚拟机设置”中,选中“硬盘”,点击“添加”,随后选择默认即可添加新硬盘。注意:添加硬盘在系统尚未启动时进行。

     

    ②打开虚拟机,使用命令:fdisk –l查看新添加的硬盘:

    [root@localhost ~]# fdisk -l
    
    Disk /dev/sdb: 10.7 GB, 10737418240 bytes
    
    255 heads, 63 sectors/track, 1305 cylinders
    
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000

    ③使用fdisk /dev/sdb命令为新硬盘进行分区,fdisk交互指令说明如下表:

    命令

    说明

    a

    设置可引导标记

    b

    编辑bsd磁盘标签

    c

    设置DOS操作系统兼容标记

    d

    删除一个分区

    l

    显示已知的文件系统类型,82为swap分区,83为Linux分区

    m

    显示帮助菜单

    n

    新建分区

    o

    建立空白DOS分区表

    p

    显示分区列表

    q

    不保存退出

    s

    新建空白SUN磁盘标签

    t

    改变一个分区的系统ID

    u

    改变显示记录单位

    v

    验证分区表

    w

    保存退出

    x

    附加功能(仅专家)

    新建/dev/sdb1主分区,/dev/sbd2扩展分区,/dev/sdb5逻辑分区。

    #新建主分区,并分配2G硬盘空间
    
    Command (m for help): n
    
    Command action
    
       e   extended
    
       p   primary partition (1-4)
    
    p
    
    Partition number (1-4): 1
    
    First cylinder (1-1305, default 1):
    
    Using default value 1
    
    Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2G
    
    #新建扩展分区,并分配剩余的硬盘空间
    
    Command (m for help): n
    
    Command action
    
       e   extended
    
       p   primary partition (1-4)
    
    e
    
    Partition number (1-4): 2
    
    First cylinder (263-1305, default 263):
    
    Using default value 263
    
    Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305):
    
    Using default value 1305
    
    #新建逻辑分区,其硬盘空间大小为扩展分区的硬盘空间
    
    Command (m for help): n
    
    Command action
    
       l   logical (5 or over)
    
       p   primary partition (1-4)
    
    l
    
    First cylinder (263-1305, default 263):
    
    Using default value 263
    
    Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305):
    
    Using default value 1305
    
    #使用w命令保存并退出
    
    Command (m for help): w
    
    The partition table has been altered!
    
     
    
    Calling ioctl() to re-read partition table.
    
    Syncing disks.

    ④建立好分区后,使用partprobe命令重新读取分区表信息,显示正常报警。

    [root@localhost ~]# partprobe
    
    Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (设备或资源忙).  As a result, it may not reflect all of your changes until after reboot.
    
    Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
    
    Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
    
    Error: 无效的分区表 - /dev/sr0 出现递归分区。

    ⑤格式化分区,写入文件系统,采用:mkfs –t ext4 /dev/sdb1,/dev/sdb5同样处理。

    [root@localhost ~]# mkfs -t ext4 /dev/sdb1
    
    mke2fs 1.41.12 (17-May-2010)
    
    文件系统标签=
    
    操作系统:Linux
    
    块大小=4096 (log=2)
    
    分块大小=4096 (log=2)
    
    Stride=0 blocks, Stripe width=0 blocks
    
    131648 inodes, 526120 blocks
    
    26306 blocks (5.00%) reserved for the super user
    
    第一个数据块=0
    
    Maximum filesystem blocks=541065216
    
    17 block groups
    
    32768 blocks per group, 32768 fragments per group
    
    7744 inodes per group
    
    Superblock backups stored on blocks:
    
            32768, 98304, 163840, 229376, 294912
    
    正在写入inode表: 完成                           
    
    Creating journal (16384 blocks): 完成
    
    Writing superblocks and filesystem accounting information: 完成
    
     
    
    This filesystem will be automatically checked every 32 mounts or
    
    180 days, whichever comes first.  Use tune2fs -c or -i to override.

    ⑥建立分区挂载点并挂载。在根分区下创建disk1和disk5目录分别作为/devsdb1和/dev/sdb5的挂载点

    [root@localhost ~]# mkdir /disk1 /disk5
    
    [root@localhost ~]# mount /dev/sdb1 /disk1
    
    [root@localhost ~]# mount /dev/sdb5 /disk5

    ⑦使用df或mount命令查看挂载

    [root@localhost ~]# df -h
    
    Filesystem      Size  Used Avail Use% Mounted on
    
    /dev/sda5        14G  2.0G   11G  16% /
    
    tmpfs           504M     0  504M   0% /dev/shm
    
    /dev/sda1       291M   32M  244M  12% /boot
    
    /dev/sda2       4.0G  136M  3.7G   4% /home
    
    /dev/sdb1       2.0G   68M  1.9G   4% /disk1
    
    /dev/sdb5       7.9G  146M  7.4G   2% /disk5

    (2)分区自动挂载

    以上的分区为手动挂载,系统重启之后需重新挂载,所以需要设置自动挂载。主要是设置/etc/fstab文件

    UUID=9288c490-0161-471c-b63a-6e56699065d5 /        ext4    defaults   1 1
    
    UUID=0b5697a3-9081-4b75-bf4c-71b4891d5e86 /boot    ext4    defaults   1 2
    
    UUID=fe5a8908-97e6-4670-a114-8bcc43af1bc2 /home    ext4    defaults   1 2
    
    UUID=3ae64e9d-7321-478b-b35f-14df91638287 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

    fstab共有六个字段,其中:

    第一个字段为分区设备文件名或UUID(硬盘通用唯一标识码);

    第二个字段为挂载点;

    第三个字段为文件系统名称;

    第四个字段为挂载参数,与mount –o选项的参数含义一样;

    第五个字段为指定分区是否被dump备份,0表示不备份,1表示每天备份,2表示不定期备份。注:每个分区目录均有备份目录lost+found;

    第六个字段为指定分区是否被fsck检测,0表示不检测,其他数字代表检测的优先级。

    因此,将新建的分区/dev/sdb1和/dev/sdb5写入fstab中进行自动挂载:

    /dev/sdb1             /disk1                  ext4    defaults        1 2
    
    /dev/sdb5             /disk5                  ext4    defaults        1 2

    (3)fstab文件修复

    如果在/etc/fstab文件中输入的内容有误,则系统在重启时将报错,此时需要对其进行修复。

    例:对/dev/sdb5分区进行自动挂载设置时,误输入/dev/sdb,即

    /dev/sdb             /disk5                  ext4    defaults        1 2

    系统在重启时,出现找不到指定分区的报错如下:

     

    此时,输入密码重新修改/etc/fstab文件,由于该文件是只读文件,因此,需要先将其所在的根分区重新挂载为读写权限,即:

    mount –o remount,rw /

    随后将输入的fstab文件修改过来,然后进行重启。

  • 相关阅读:
    Java语言
    包名规范
    带参数的方法
    成员变量和局部变量
    Java数据类型
    java反射机制
    JDK安装
    注释
    二维数组
    数组的经典排序
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/4295174.html
Copyright © 2020-2023  润新知