首页 > 系统 > Linux > 正文

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

2024-06-28 13:21:57
字体:
来源:转载
供稿:网友
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 -ThFilesystem     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/sda1dumpe2fs 1.41.12 (17-May-2010)Filesystem volume name:   <none>Last mounted on:          /bootFilesystem UUID:          0b5697a3-9081-4b75-bf4c-71b4891d5e86Filesystem magic number:  0xEF53Filesystem 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_isizeFilesystem flags:         signed_directory_hashDefault mount options:    user_xattr aclFilesystem 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.shhello 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-6EULA     RELEASE-NOTES-en-US.html    RPM-GPG-KEY-CentOS-Testing-6GPL       repodata                    TRANS.TBLimages           RPM-GPG-KEY-CentOS-6isolinux         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 -lDisk /dev/sdb: 10.7 GB, 10737418240 bytes255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk 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): nCommand action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1First cylinder (1-1305, default 1):Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2G#新建扩展分区,并分配剩余的硬盘空间Command (m for help): nCommand action   e   extended   p   primary partition (1-4)ePartition number (1-4): 2First cylinder (263-1305, default 263):Using default value 263Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305):Using default value 1305#新建逻辑分区,其硬盘空间大小为扩展分区的硬盘空间Command (m for help): nCommand action   l   logical (5 or over)   p   primary partition (1-4)lFirst cylinder (263-1305, default 263):Using default value 263Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305):Using default value 1305#使用w命令保存并退出Command (m for help): wThe partition table has been altered! Calling ioctl() to re-read partition table.Syncing disks.

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

[root@localhost ~]# partprobeWarning: 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/sdb1mke2fs 1.41.12 (17-May-2010)文件系统标签=操作系统:Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks131648 inodes, 526120 blocks26306 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=54106521617 block groups32768 blocks per group, 32768 fragments per group7744 inodes per groupSuperblock 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 or180 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 -hFilesystem      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 1UUID=0b5697a3-9081-4b75-bf4c-71b4891d5e86 /boot    ext4    defaults   1 2UUID=fe5a8908-97e6-4670-a114-8bcc43af1bc2 /home    ext4    defaults   1 2UUID=3ae64e9d-7321-478b-b35f-14df91638287 swap    swap    defaults   0 0tmpfs                   /dev/shm        tmpfs   defaults        0 0devpts                  /dev/pts         devpts  gid=5,mode=620  0 0sysfs                   /sys              sysfs   defaults        0 0proc                    /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文件修改过来,然后进行重启。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表