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文件修改过来,然后进行重启。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。