在以前的内容当中咱们讲到了磁盘的特性以及介绍了磁盘的分区,而后又介绍到文件系统的概念等。在如今的Linux中不管是机械式硬盘仍是U盘以及固态硬盘,都统一命名为/dev/sd[a-z]#,而管理分区,不管是建立仍是删除分区,可使用fdisk、parted、sfdidk,而咱们要想在磁盘上存储数据的话,就要建立文件系统。在Linux中,文件系统的类型例如:ext二、ext三、ext四、xfs、reiserfs、iso9600、swap等分区。以后咱们由介绍了文件系统中组织结构当中的术语,分别为block groups、block、inode table、inode、inode bitmap、block bitmap、super block。那么在这一章当中,咱们开始介绍磁盘和文件系统的管理。node
咱们在CentOS 6中建立主分区,添加一块磁盘设备,而后对其进行建立三个主分区一个扩展分区,扩展分区下有逻辑分区,步骤以下:算法
# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xeb83365f. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G
这样重复三次,三个主分区就建立了,以后在建立扩展分区,在Partition number,每次建立的时候数字要加1,在扩展分区中就没有这个操做了,完成点击w,若是没有警告的话,就查看一下文件看一下内核是否读到该操做:vim
# cat /proc/partitions major minor #blocks name 8 0 52428800 sda 8 1 204800 sda1 8 2 5242880 sda2 8 3 1048576 sda3 8 4 1 sda4 8 5 11534336 sda5 8 6 981 sda6 8 7 1052548 sda7 8 8 1060258 sda8 8 9 1060258 sda9 8 10 1060258 sda10 8 16 20971520 sdb 8 17 2104483 sdb1 8 18 2104515 sdb2 8 19 2104515 sdb3 8 20 1 sdb4 8 21 2104483 sdb5 9 127 2102272 md127
那么如今要如何更改分区类型,例如将/dev/sdb6下的Linux分区更改成swap分区。咱们先来看一下该分区的ID号为多少。centos
# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0xeb83365f Device Boot Start End Blocks Id System /dev/sdb1 1 262 2104483+ 83 Linux /dev/sdb2 263 524 2104515 83 Linux /dev/sdb3 525 786 2104515 83 Linux /dev/sdb4 787 2610 14651280 5 Extended /dev/sdb5 787 1048 2104483+ 83 Linux /dev/sdb6 1049 1441 3156741 83 Linux
能够看出,/dev/sdb6的分区ID为83,那么咱们将要更改成swap分区,若是不知道如何更改,按m进行查看帮助。以后咱们按t键并选择序号为6,按L键查看分区列表,找到swap分区的ID号,输入该ID号就能够完成并保存。异步
Command (m for help): t Partition number (1-6): 6 Hex code (type L to list codes): L Hex code (type L to list codes): 82 Changed system type of partition 6 to 82 (Linux swap / Solaris) Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0xeb83365f Device Boot Start End Blocks Id System /dev/sdb1 1 262 2104483+ 83 Linux /dev/sdb2 263 524 2104515 83 Linux /dev/sdb3 525 786 2104515 83 Linux /dev/sdb4 787 2610 14651280 5 Extended /dev/sdb5 787 1048 2104483+ 83 Linux /dev/sdb6 1049 1441 3156741 82 Linux swap / Solaris Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
若是提示设备或资源忙,就使用partx让内核重读该分区表。async
# partx -a /dev/sdb
那么如今咱们开始管理磁盘上的文件系统,此前讲过文件系统管理工具,而文件系统(内核级)一般由两部分组成,第一种是让磁盘工做起来的某个模块,咱们称之为文件系统的驱动;第二种是文件系统的管理工具,咱们要想真正的管理某个分区,或者利用该文件系统的驱动,那么用户就得须要一些管理工具用来管理该分区。ide
内核级文件系统的组成部分: 文件系统驱动:由内核系统提供; 文件系统管理工具:由用户空间应用程序提供;
要想使用该文件系统驱动的话,有可能先要在用户空间当中手动安装该程序来进行提供。
那么如何建立文件系统,对于文件系统来讲,它们的建立方式也会有所不一样,不过咱们均可以用mkfs来进行建立该分区。工具
ext系列文件系统管理工具: mkfs.ext2, mkfs.ext3, mkfs.ext4 mkfs -t ext2 = mkfs.ext2 ext系列文件系统专用管理工具:mke2fs mke2fs [OPTIONS] device -t {ext2|ext3|ext4}:指明要建立的文件系统类型; mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4 -b {1024|2048|4096}:指明文件系统的块大小; -L LABEL:指明卷标; -j:建立有日志功能的文件系统ext3; mke2fs -k = mke2fs -t ext3 = mkfs.ext3 -i #:bytes-per-inode, 指明inode与字节的比率;每多少字节建立一个inode; -N #:直接指明要给此文件系统建立的inode数量; -m #:指定预留空间,百分比; -O[^]FEATURE:以指定特性建立目标文件系统 e2abel命令:卷标的查看与设定 查看:e2label device 设定:e2label device LABEL tune2fs命令:查看或修改ext系列文件系统的某些属性; adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems; 注意:块大小建立后不可修改; tune2fs [OPTIONS] device -l:查看超级块的内容; 修改指定文件系统的属性: -j:ext2 --> ext3; -L LABEL:修改卷标; -m #:指定预留的空间,百分比; -O[^] FEATURE:以指定的特性建立目标文件系统; -o[^]mount_options:开启或关闭某种默认挂载选项; acl ^acl dumpe2fs命令:显示ext系列文件系统的属性信息; dumpe2fs [-h] device
下一个命令为fsck,为文件系统检测命令,该命令是用于实现文件系统的检测工具,就像Windows同样,若是有意外的状况(如断电),则Windows有可能会对硬盘来进行检测,固然也能够手动中止中止。ui
用于文件实现文件西永的检测工具: 因进程意外停止或系统崩溃等等缘由致使写入操做非正常时,可能会形成文件损坏;此时,应该检测并修复文件系统;建议:离线进行; ext系列文件系统的专用工具: e2fsck [OPTIONS] device -y:对全部问题自动回答为yes; -f:即便文件系统处理clean状态,仍要强制检测; fsck: check and repair a Linux filesystem -t fstype:指明文件系统类型; fsck -t ext4 = fsck.ext4 -a:无须交互而自动修复全部错误; -r:交互式修复;
那么以上就是ext系列文件系统的管理工具,不管是建立、修复、检测等命令,都对其一一介绍,须要的是熟练操做而且轻车熟路的去驾驭。
咱们如今就建立一个ext4文件系统,用刚才的/dev/sdb6。url
# mkfs.ext4 /dev/sdb6
以后咱们能够查看该设备的文件系统类型,用blkid命令。
# blkid /dev/sdb6 /dev/sdb6: UUID="e8879f1b-05ea-4512-abe6-c6aa8685ce80" TYPE="ext4"
须要注意的是,CentOS 6不支持xfs文件系统,想使用的话需安装。至于如何安装,咱们主要使用的yum命令来进行安装,该目录在/etc/yum.repos.d/,建立一个.repo的仓库文件。
# cd /etc/yum.repos.d/ # cat aliyun.repo [aliyun-base] name=aliyun-base baseurl=https://mirrors.aliyun.com/centos/6/os/x86_64/ gpgkey=https://mirrors.aliyun.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6 [aliyun-epel] name=aliyun-epel baseurl=https://mirrors.aliyun.com/epel/6Server/x86_64/ gpgcheck=0
咱们用nano来进行编辑建立一个文件,将上述的内容复制到该文件中,以后咱们只用yum repolist来检测一下:
# yum repolist
以后咱们安装xfs文件系统,该包名为xfsprogs。
# yum -y install xfsprogs
安装完成以后咱们使用mkfs.双击tab键来进行查看。
# mkfs. mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs 建立:mkfs.xfs /dev/sd[a-z]# 检测:fsck.xfs
那么下面咱们介绍的是blkid命令,就是查看该文件系统的相关属性,那么最经常使用的方法以下:
blkid device blkid -L LABEL:根据LABEL定位设备; blkid -U UUID:根据UUID定位设备;
接下来咱们说一下swap文件系统,简单来讲swap分区的做用就是,当内存占满时,使用LRU最近最少使用算法,将某一个空闲进程放置在该交换分区中。那么如何管理swap文件系统。
swap文件系统: Linux上的交换分区必须使用独立的文件西永; 且文件系统的System ID必须为82; 建立swap设备:mkswap命令 mkswap [OPTIONS] device -L LABEL:指明卷标; -f:强制;
咱们开始建立Windows系统,主要针对的是fat32(vfat),NFTS不能识别或者说不能支持(仅限于CentOS)。
Windows没法识别Linux的文件系统;所以,存储设备须要两种系统之间交叉使用时,应该使用 Windows和Linux同时支持的文件系统;fat32(vfat); # mkfs.vfat device
对于Linux,或者说对于文件系统分区来说,要想被访问到,必需要关联至当前根下某一个位置,而这种行为咱们称之为挂载,与之对该目录进行关联。
文件系统的使用: 首先要"挂载":mount命令和umount命令; 根据文件系统之外的其它文件系统要想可以被访问,都必须经过"关联"至根文件系统上的某个目录来实现,此关联操做过程称为"挂载";而此目录即称为"挂载"; 挂载点:mount_point,用于做为另外一个文件系统的访问入口;
要想在Linux中实现挂载操做,咱们使用mount命令来进行挂载,该命令格式为:
mount [-fnrsvw] [-t vfstype] [-o options] device dir
该命令选项为:
命令选项: -r:readonly, 只读挂载; -w:read and write, 读写挂载; -n:默认状况下,设备挂载或卸载的操做会同步更新至/etc/mtab文件中;-n选项用于禁止此特性; -t type:指明要挂载设备上的文件系统类型;多数状况下可省略,此时mount会经过blkid来判断要挂载的设备文件的系统类型; -L LABEL:挂载时以卷标的方式指明设备; mount -L LABEL dir -U UUID:挂载时以UUID的方式指明设备; mount -U UUID dir
还有一个选项为-o,咱们称之为挂载选项,那么该选项是指该设备挂载时指定文件系统的特性。
-o options:挂载选项 sync/rsync:同步/异步操做; atime/mtime:文件或目录在被访问时是否更新其访问时间戳; diratime/nodiratime:目录再被访问时是否更新其访问时间戳; remount:从新挂载; acl:支持使用acl功能; # mount -o remount,acl device dir # mount -o acl device dir # tune2fs -o acl device ro:只读 rw:读写 dev/nodev:设备上是都容许建立设备文件; exec/noexec:是否容许运行设备上的程序文件;(能够防止未经受权的文件自动启动) auto/noauto: user/nouser:是否普通用户挂载此文件系统; suid/nosuid:是否容许程序文件上的suid和sgid特殊权限生效; default:Use default options:rw, suid, dev, exec, auto, nouser, and async.
不过,须要注意如下几点就能能够进行挂载。
(1) 事先挂载 (2) 应该使用未被或不会被其它进程使用到的目录; (3) 挂载点下原有的文件将会被隐藏;
那么咱们如今去挂载一个磁盘,在CentOS 7中,以刚才的/dev/sda6做为挂载设备,将它挂在到/media/disk中,不过,因为disk事先不存在,因此咱们要建立该目录。
# mount /dev/sda6 /media/disk/
挂载成功以后,咱们进入该目录,建立一个文件或目录;名为tests。以后,咱们将/etc/fstab文件复制到当前目录中来。
# mkdir tests # cp /etc/fstab ./ # ll total 4 -rw-r--r-- 1 root root 595 Jan 30 10:08 fstab drwxr-xr-x 2 root root 6 Jan 30 10:08 tests
因此,不管那个目录位置做为该设备的访问入口,那么该设备入口的文件也会随之显示在该目录中。
咱们还有一个使用技巧,或者叫作秘籍,咱们不止能够把设备挂载到某个目录上,还能够将目录关联至某个目录上,这个能够称之为绑定。
一个使用技巧: 能够实现将目录绑定至另外一个目录上,做为其临时的访问入口; mount --bind 源目录 目标目录
咱们还能够查看在当前系统上全部已经挂载的设备:
# mount # cat /etc/mtab # cat /proc/mounts
若是咱们挂载光盘的话,须要指定设备为cdrom或者为sr0,用来挂载光盘:
挂载光盘: mount -r /dev/cdrom mount_point 光盘设备文件:/dev/cdrom, /dev/dvd
挂载U盘也是同样的,但须要识别该设备文件:
挂载U盘: 事先识别U盘的设备文件;
若是要卸载该设备,卸载设备的命令为umount命令。
umount命令: umount device | dir
不过咱们须要注意的是:若是你在当前的挂载点进行卸载的话,则会警告你设备或资源忙,卸载不成功。
注意:正在被进程访问到的挂载点没法进行卸载; # umount /dev/sda6 umount: /media/disk: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
因此说要先退出挂载点目录在进行卸载,而后在进入该目录,看其文件是否存在。
# cd # umount /dev/sda6 # cd /media/disk/ # ll total 0
可是,若是非得强制卸载的话,咱们须要查看是被那个进程所被占用。
查看被那个或那些进程所占用: # lsof MOUNT_POINT # fuser -v MOUNT_POINT 终止全部正在访问某个挂载点的进程: # fuser -km MOUNT_POINT
咱们此前也讲过交换分区的概念,那么如今如何管理交换分区,例如启用与禁用。
交换分区的启用和禁用: 建立交换分区的命令:mkswap 启用:swapon swapon [OPTIONS] [DEVICE] -a:定义在/etc/fstab文件中的全部swap设备; 禁用:swapoff swapoff DEVICE
在系统中,启动开机时有些设备就会自动启动挂载到该目录下,而咱们建立的设备即便挂载到某个目录当中,等到再次开机时,还要从新挂载一遍,这是由于在系统启动时,系统会读取fatab配置文件来进行自动挂载设备。
设定除根文件系统之外的其它文件系统可以开机时自动挂载;/etc/fstab文件 每行定义一个要挂载的文件及相关属性: 共6个字段: (1) 要挂载的设备: 设备文件 LABEL UUID 伪文件系统:如sysfs, proc, tmpfs等; (2) 挂载点 swap类型的设备挂载点为swap; (3) 文件系统类型; (4) 挂载选项 default:默认使用挂载选项; 若是同时指明多个挂载选项,彼此间以逗号分隔便可; default, acl, noatime, noexec (5) 存储频率 0、从不备份; 一、天天备份; 二、每隔一天备份; (6) 自检次序 0、从不备份 一、首先自检,一般只能是根文件西永可用1; 二、次级自检; ... mount -a:可自动挂载定义在此文件中的全部支持自动挂载的设备;
示例,咱们将CentOS 7的/dev/sda6进行开机时自动挂载。
首先,咱们现检查该设备的UUID。
# blkid /dev/sda6 /dev/sda6: UUID="94b5bc24-1d14-4084-a9c7-d1a3172f03f6" TYPE="xfs"
复制UUID,以后打开/etc/fstab文件,添加格式以下:
# vim /etc/fstab UUID=94b5bc24-1d14-4084-a9c7-d1a3172f03f6 /media/disk xfs defaults 0 0
保存并退出,使用mount -a,命令选项来检查并启动挂载该设备文件。
# mount -a
若是没有提示错误,则挂载成功。
这两个命令为df和du命令。df命令是查看磁盘的使用状况,前提是挂载以后才能查看该分区,那么du是查看单个文件或目录占用该分区的容量大小。
df命令: df [OPTIONS]... [FILE]... -i:仅显示本地文件的相关信息; -h:--human-readable -i:显示inode的使用状态而非blocks du命令: du [OPTIONS]... [FILE]... -s:sumary -h:--human-readable