文件系统和磁盘分区
- 对于一个存储空间来讲,文件系统是独占的,所以要进行分区(每一个分区都可以实现一个文件系统,即每一个分区都是一个独立的文件系统)
- 每一种文件系统都是工作在内核中的,通过系统调用提供文件的管理功能。所以,同一个操作系统的不同文件系统的系统调用一般是不一致的
- Linux操作系统支持N种文件系统,Linux提供一个统一的接口,屏蔽了这些文件系统的差异,而这个接口叫VFS(Virtual File System虚拟文件系统)
- 文件系统是一种工作在内核中的软件,能够将某个分区中的数据以文件的方式组织并提供给我们的管理机制
- 文件系统的数据分为两类:元数据(metadata)和数据(data)。
- 文件系统是在格式化分区的时候创建的
小结:Linux操作系统支持多种文件系统,使用统一的接口(VFS)屏蔽各文件系统之间的差异。文件系统工作在系统内核中,每一个分区都是一个独立的文件系统。
磁盘块的存储结构
- 大小固定的(可选)
- 一个块只能属于一个文件,一个文件可以包含多个块
- 一个文件所占用的磁盘块并不一定是连续的,所以需要元数据
- 条目编号,inode(index node)
- 每一个文件都有一个元数据(128byte),用于追踪一个文件,包含了文件类型(普通文件、目录、链接等等)、权限、链接次数、属主和属组ID、时间戳、所占据的磁盘块
- 目录跟普通文件一样,也是一个文件,文件名存放在目录上
- 查找文件,先找到目录帧,从目录上查找到文件名所对应的条目,然后根据条目便可以找到所在的磁盘块
- 根是一种特殊的目录,是自引用的
小结:磁盘块(block)在分区格式化时指定一个大小,此大小指定后是不可修改的,要想修改必须重新格式化分区。
文件操作与磁盘存储对应过程
- 计算机最快的查找机制是key-value
- bitmap:结点位图,块位图,快速扫描,0为未使用,1为使用,则扫描为0的即可申请使用,加快了创建的过程。删除文件就是将对应的位图上的位置标记为0,数据时没有动的,所以删除的文件是可以恢复的,若存入新的文件则会覆盖使得不容易找回数据。
文件粉碎机的原理就是生成一大推的0或1覆盖掉原来的磁盘信息以达到删除的目的。
- 剪切的过程就是在一个目录上把对应的条目删除,在另一个目录上增加对应的条目,所以剪贴比较快,但从一个分区剪切到另一个分区则不同了(此时要先复制再删除)
- 通过两个或两个以上的路径来访问同一个文件(同样的数据块),硬链接,对于硬链接,删除任意一个路径,链接次数减1,新建则加1,只有在链接次数减为0时才可删除,
- 硬链接不可跨分区,不能指向目录,会导致目录循环引用(?)
- 符号链接(软链接)没有数据只有元数据,不会在磁盘上存储任何数据,本身是一个独立的文件,与引用文件无关,在元数据中指向一个路径
- 软链接可以指向目录,可以跨分区
- 缓冲缓存BufferCached
- Linux能用物理内存就先用物理内存
- 分区再分为小块独立管理,位图也是自我管理的,跨位图(并不是真正的分界),结点位图,元数据区有个超级块(SuperBlock)负责管理协调这些子区域,有多个副本,以防止挂了(挂了整个分区都没用了)
小结:位图(bitmap)的使用加快了文件的创建与删除过程。软链接没有数据只有元数据,是一个独立的文件。超级块(SuperBlock)负责协调子区域,作用不可替代,有多个副本以备不时之需。
创建链接文件
ln [option] srcdst
默认创建硬链接
-v 显示详细创建信息
-s 创建软链接
小结:创建链接文件的命令为ln (link)
Linux、Unix支持的文件系统类型
- 传统:ext2(非日志文件系统),ext3,ext4(扩展的),reiserfs,xfs,jfs
- 光盘:iso9660
- 集群文件系统:GFS,OCFS2(Oracle)
- 网络文件系统:NFS,CIFS(通用互联网文件系统)
- Windows:VFAT(FAT,FAT32),NTFS(对前者支持比较好)
小结:Linux支持多种文件系统,文件系统分为日志型和非日志型,使用何种类型更为合理应结合具体的生产环境而决定。
free –m 查看内存使用状况(以M为单位显示)
硬盘基础知识
- 硬盘出厂时也进行格式化,称为低级格式化,将磁盘划分成扇区(sector),默认512byte,是物理的(block是逻辑的)最小存储单位,不能再划分使用了
- 编号最小的扇区又叫引导扇区(boot sector),放了一段程序,负责启动硬盘上某个分区安装的操作系统,不能划分给分区,程序占据446byte,被称为引导加载器(boot loader),64byte磁盘分区表(磁盘有多少个分区,每16byte标识一个分区,所以一个硬盘最多只能有4个主分区,但最新的技术可能会突破这点限制,可以分区的数量由boot sector决定的),2byte引导扇区的分区结束代码
- 扩展分区:本身是不可以直接使用的分区,将剩下的磁盘空间标记为自我管理磁盘分区表的分区,逻辑概念,要想使用必须再次分区,称为逻辑分区
- 一块磁盘:4个主分区,3主分区1扩展分区(N个逻辑分区),一主一扩展(N逻辑分区,Windows常采用,C盘为主分区)
- 磁道track,每个磁盘由N个同心圆组成,称为磁道,磁道再次被划分成扇区
- 磁盘分区是按磁道分的,相同角速度旋转,则越靠外转过的距离的越大,性能也越好,一般来讲,磁盘符号越靠前,磁道也越靠前
- 多片磁片双面
- 同一个磁盘不同盘面相同编号的磁道叫柱面(cylinder)
小结:低级格式化时划分扇区(默认512byte)。前512byte作为引导扇区(boot sector),负责启动操作系统,不划分给任何分区,其中前446byte被称为boot loader,后64byte用于存放磁盘分区表,最后2byte结束代码。一个磁盘至多只能有一个扩展分区,本身不能直接使用,必须继续划分为逻辑分区后再使用。
创建分区
- 硬件:/dev
- IDE:/dev/hda,/dev/hdb,/dev/hdc,…,一般个人台式机有两个IDE接口,每一个接口两个盘一主一从,第一个口主hda从hdb,第二个口主hdc
- SATA:/dev/sda,/dev/sdb,/dev/sdc,…主分区:1-4,扩展分区1-4中的一个,逻辑分区:5+
- USB:/dev/sda,/dev/sdb,/dev/sdc,…
- SCSI:/dev/sda,/dev/sdb,/dev/sdc,…
- SAS:/dev/sda,/dev/sdb,/dev/sdc,…
- 查看分区fdisk,使用该命令需有管理员权限,使用需小心
fdisk /dev/sda 进入交互模式
w保存并退出
q直接退出
- Linux虚拟内存使用独立分区(即独立的文件系统),而Windows则放在C盘上,一般来讲,虚拟内存是物理内存(少于2G时)的2倍,大于2G时1.5倍,物理内存足够大时也需要虚拟内存以备特殊情况发生
- cat /proc/partitions proc里放得是内核信息
- 分区创建完以后还不能使用,没有文件系统
- 低级格式化,高级格式化:在分区中创建文件系统
- U盘默认FAT文件系统
- mkfs (make file system)
mkfs –t FS_TYPE /dev/device =mkfs.FS_TYPE /dev/device
小结:分区创建完成后要创建文件系统方能使用,/proc目录下存放的是系统内核信息。
分区与挂载
- 对于分区所取的名字用来引用,称为卷标(label)
- 块大小是不能重新调整的,要改变必须重新格式化
- 根所在的分区就叫根文件系统(root filesystem)
- 可以把一个目录作为在当前根上去引用其他文件系统的入口,若该目录本身有文件,当开放文件系统入口时这些文件就被隐藏了,ls看到的是另一文件系统中的文件
- mount:将根下的某个目录作为分区的访问入口,文件系统只有挂载到根下的某个路径下才能被访问,如果挂载到根上,江山易主了,此时根下其他文件访问不了
mount /dev/sda5 /mnt
-t 文件系统类型
mount 显示当前系统上所有已挂载的设备、挂载点、文件系统类型及挂载选项
mount –o remount,ro /dev/sda5 重新挂载为只读
loop选项挂载主机中的镜像
- mkdir /media/cdrom 以后光盘都安装在该目录下
mount –o ro /dev/cdrom/media/cdrom 挂载mount -r /dev/cdrom/media/cdrom
umount /dev/cdrom 卸载(Linux必须挂载光盘才能使用,卸载光盘才能将光盘取出)
- umount:取消关联
- fuser –v /mnt 查询谁在访问该目录
fuser –km file 杀掉正在占用的进程
- /mnt和/media是预留的两个用于挂载的目录,也可以自己新建目录作为挂载点
- 异步性能较好,同步数据更安全
小结:根所在的分区叫根文件系统(root filesystem),mount命令用于将文件系统挂载到根下某个路径,只有这样,文件系统才能够被访问。
磁盘管理
- 创建虚拟内存文件系统swap,独立的文件系统,分区来实现虚拟内存
- mkswap /dev/device:创建swap文件系统
- swapon /dev/device 启用swap文件系统
-a 启用所有swap文件系统
swapoff 关闭swap文件系统
- 当前系统无任何空余磁盘空间可用于创建分区,Linux支持在某一个文件系统上创建一个模拟的本地回环设备(软件实现)来模拟一个磁盘使用,在某个文件系统上还有很多的空闲空间
- dd(在二进制级别复制01代码,底层)
dd if=/etc/issue of=/tap/issue 将etc下的issue复制为tap下的issue
(if:来源,of:去向,bs:blocksize,count:多少个)
dd if=/etc/sda of=/root/mbr.backupbs=512 count=1 备份
dd if=/root/mbr.backup of=/etc/sdabs=512 count=1 还原
dd if=/dev/zero of=/dev/sda bs=446count=1 用一串0把sda中的前446byte覆盖了,boot loader
没了,系统不能启动了,若bs=512,则连分区表一起丢失,找不着文件删除一个磁盘上的所有分区
可以采用这种方法
dd if=/dev/zero of=/root/swap.virbs=1M count=128,复制128M的0填充了一个文件
- 0扇区不属于任何一个分区,引导扇区
- dd if=/dev/zero of=/root/swap.vir bs=1Mcount=128,复制128M的0填充了一个文件
mkswap /root/swap.vir 创建swap文件系统
swapon /root/swap.vir 启用swap文件系统
- dd也可以用于制作镜像文件
dd if=/dev/cdrom of=/root/a.iso
- cat也可以用于制作镜像文件
cat /dev/cdrom > /root/a.iso
- 配置文件/etc/fstab 文件系统表,自动挂载
设备,挂载点,文件系统类型,挂载选项(逗号分隔),完全备份频率(0,1,2),文件系统检测的次序 (0-9)
编辑修改该文件即可实现开机自动挂载文件系统
自动挂载交换分区,挂载点和文件系统类型是swap
- mount –a 将/etc/fstab支持自动挂载的文件系统挂载到指定挂载点
- df 用于显示文件系统磁盘空间使用情况
df –P 不换行显示
- awk使用方法
- du 估算文件空间使用情况
du /etc 显示etc下的每个文件及其大小
du –s /etc 显示整个目录包括目录中的文件大小摘要(summary)
-h 实现单位换算
du –sh /* 显示根下单级目录及其大小
- 刚装完系统后占用空间最大的是/usr
小结:Linux虚拟内存使用独立的分区,即独立的文件系统swap。Linux支持在当前文件系统上创建一个模拟的本地回环设备用于模拟磁盘使用。/etc/fstab文件系统表。dd命令用于底层复制。cat、dd命令均可实现镜像文件的制作。