文件存储结构(FHS标准)
linux下的一切都是文件, 并从“根(/)”目录开始的,并按照文件系统层次化标准(FHS, Filesystem Hierarchy Standard)采用树形结构来存放文件,以及定义了常见目录的用途。另Linux 系统中的文件和目录名称是严格区分大小写的。
FHS标准: 用户应该把什么类型的文件文件存放到什么位置,但用户不一定要遵守,这里只是定义而非规定。
linux下的一些常用目录和作用
/etc /bin /dev /lib /sbin这五个目录不可与根目录分开在不同的分区
目录名称 | 应放置文件内容 |
---|---|
/boot | 开机所需文件——内核,开机菜单以及所需配置文件等 |
/dev | 以文件形式存放于任何设备和接口 |
/etc | 配置目录 |
/home | 用户家目录 |
/root | 系统管理员的家目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机时用到的函数库,以及 /bin 与 /sbin 下面的命令调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录 |
/opt | 放置第三方的软件 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共享”临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr | 用户目录 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux 系统开机时不会使用到的软件/命令/脚本 |
/usr/bin | 非开机过程中,用户可以使用的命令 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/usr/src | 放置源码 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
物理设备命名规则
因为Linux下的一切都是文件,所以硬件设备也不例外,既然是文件,就需有文件名称,系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等。另,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev 目录下的设备文件。Linux 系统中常见的硬件设备的文件名称如下表所示:
硬件设备 | 文件名称 |
---|---|
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/hto |
由于现在的IDE 设备已经很少见了,所以一般的硬盘设备都会是以/dev/sd开头的。而一台主机上可以有多块硬盘,因此系统采用a~p 来代表16 块不同的硬盘(默认从a 开始分配),而且硬盘的分区编号也很有讲究:主分区或扩展分区的编号从1 开始,到4 结束;逻辑分区从编号5 开始。
设备名称: /dev 目录中sda 设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。大家以后在使用iSCSI 网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb 这个设备就是这个道理。
分区名称: 分区的编号并不代表着分区的个数,比如sda3 表示这是设备上的第三个分区,这个是错误的。因为分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3 只能表示是编号为3 的分区,而不能判断sda 设备上已经存在了3 个分区。
硬盘设备是由大量的扇区组成的,每个扇区的容量为512 字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446 字节,分区表为64 字节,结束符占用2 字节;其中分区表中每记录一个分区信息就需要16 字节,这样一来最多只有4 个分区信息可以写到第一个扇区中,这4 个分区就是4 个主分区。所以一个扇区最多能创建四个主分区,为了解决分区个数不够的问题,可以将第一个扇区的分区表中16 字节的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用16 字节分区表空间的指针——一个指向另外一个分区的指针。这样一来,用户一般会选择使用3 个主分区加1 个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于4 个)的需求。
扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。
文件系统与数据资料
Ext3: 是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
Ext4: Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
XFS: 是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。
inode存放文件的权限与属性记录,每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:
该文件的访问权限(read、write、execute);
该文件的所有者与所属组(owner、group);
该文件的大小(size);
该文件的创建或内容修改时间(ctime);
该文件的最后一次访问时间(atime);
该文件的修改时间(mtime);
文件的特殊权限(SUID、SGID、SBIT);
该文件的真实数据地址(point)。
block存放文件的实际内容(大小可以为1KB、2KB、4KB)。
文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB。
文件很大(5KB),那么会占用两个block(5KB-4KB后剩下的1KB也要占用一个block)。
挂载卸载硬件设备
1.添加硬盘
2.将硬盘进行分区
ls -l /dev/sd* #查看硬盘
fdisk /dev/sdb #创建分区
在此命令下p—查看分区信息;n—新建分区;p—查看主分区;设置分区个数;确定;添加分区大小(需写加号,例如+2GB);保存退出
file /dev/sdb1 #查看是否同步到系统内核,若出现block special则同步,否则输入partprobe,手动挂载到系统内核
分区常用参数
参数 | 作用 |
---|---|
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
3.格式化分区
mkfs+Tab键 #查看文件系统名称
mkfs.xfs /dev/sdb1 #格式化分区
4.挂载与卸载(挂载操作就是把硬件设备与目录进行关联的动作,卸载操作就是取消硬件设备与目录关联的动作,)
mount /dev/sdb1 需挂载的目录 #挂载分区(一次性挂载)
vim /etc/fstab #编辑永久性挂载
挂载信息格式(每一项过后按Tab键,使格式相同):
/dev/sdb1 #挂载设备文件,一般为设备的路径+设备名称,也可以写唯一识别码
/mu #指定要挂载到的目录,需在挂载前创建好
xfs #文件系统格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
defaults--默认 #配置文件权限,则默认权限为:rw, suid, dev, exec, auto, nouser, async
0 #是否开机后使用dump进行磁盘备份,0表示备份,1表示不备份
0 #是否开机后使用dump进行磁盘备份,0表示不自检,1表示自检
挂载(mount)参数
-a:挂载所有在/etc/fstab中定义的文件系统
-t:指定文件系统的类型
5.查看挂载卸载
df -h #查看挂载记录和硬盘使用量信息
du命令:用于查看文件数据占用量。
du -sh /* #查看在Linux系统根目录下所有一级目录分别占用的空间大小
du -sh /newFS #查看/newFS下的内容占了多少容量
添加交换分区 (与挂载使用存储设备相似)
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。
1.创建分区
fdisk /dev/sdb #创建分区
p(查看分区内容)——n(新建分区)——p(查看主分区内容)——回车——回车——出入交换分区大小(在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍)——w保存
2.格式化分区
partprobe
partprobe
mkswap /dev/sdb2 #格式化分区
3.挂载与卸载
swapon /dev/sdb2 #swap分区没有挂载点,所以需要用挂载swap分区的专用命令来对swap分区进行挂在操作
swapoff /dev/sdb2 #卸载swap分区设备
vim /etc/fstab #编辑永久挂载
挂载信息格式:/dev/sdb2 swap swap defaults 0 0(意义与上一挂载相似)
添加交换分区的目的是增大模拟内存的内存总量,故用free -h查询结果。