chap8Linux磁盘与文件系统管理
- Linux最传统的磁盘文件系统是EXT2
- 文件系统的特性
- 分区&文件系统
- 传统磁盘和文件系统中,一个分区只能被格式化成一个文件系统
- 以前“格式化”是针对“分区”而言的,一个文件系统即是一个分区
- 新的技术诸如LVM与软磁盘阵列(software raid),使得一个分区可以格式化成多个文件系统,也可以将多个分区合成一个文件系统
- 如今“格式化”是针对“一个可被挂载的数据”,一个文件系统是一个可被挂载的数据
- 操作系统所设置的文件属性/权限 与 实际数据通常是存放在不同的块中
- 索引式文件系统
- super block:记录文件系统的整体信息,包括inode/block总量、使用量、剩余量,以及文件系统的格式与相关信息等
- inode:记录文件的属性,和文件数据所在的block号码(一个文件占用一个inode)
- block:实际记录文件内容,若文件太大,会占用多个block
- 文件系统中的inode单独存放,访问数据时先在inode中找到文件对应的block号码,再去访问block中文件的数据
- compare:惯用文件系统如FAT
- 每个block号码记录在前一个block中
- 如先访问block1,得知下一个block为4,前往后得知再下一个block为7,以此类推
- 没办法一次性知道4个block的号码
- 碎片整理
- 原因:文件写入的block太过于离散,导致文件读取的性能将会变得很差
- 目的:将同一个文件所属的block汇合在一起
- FAT经常需要碎片整理,而EXT2基本上不太需要碎片整理,但是文件系统使用太久,经常删除/编辑/新增文件时,仍然有可能造成文件数据太过离散,偶尔还是需要碎片整理的
- EXT2文件系统
- 格式化时就将inode与block规划好,除非重新格式化或者利用resize2fs等命令更改文件系统大小,否则inode与block将固定不变
- 文件系统格式化时会划分为多个块组(block group)
- 解决inode与block数量太大而不易管理的问题
- 每个块组有独立的inode/block/super block系统
- 文件系统的最前面有一个启动扇区(boot sector),可以安装引导装载程序
- super block大小为1024bytes
- super block前端也需要留出1024bytes作为boot sector
- 当block为1K时
- super block没有多余的空间来作为boot sector
- 所以在super block之前需要多空处一个block来作为boot sector
- 当block大于2K(2K / 4K)时
- super block有足够的空间来给boot sector
- 所以boot sector与super block为同一block
- boot sector位于该block的最前端
- 所以,“引导装载程序可以安装到super block内”的说法并不完全正确
- 更为正确的说法是“可以安装到该文件系统最前面的1024bytes内的区域”
- 每个block group依次分为以下六个区段
- super block(大小为1024bytes)
- 记录整个文件系统的基本信息,包括
- block与inode的总量
- 未使用/已使用的block/inode数量
- block与inode的大小
- block为1K, 2K, 4K
- inode为128bytes
- 文件系统的挂载时间、最后一次写入数据的时间、最后一次检验磁盘(fsck)的时间等
- 一个valid bit数值,
- 若文件系统已被挂载,其值为0
- 若文件系统没被挂载,其值为1
- 一般只有第一个block group内含有super block
- 若其他block group含有super block,则主要是作为备份,方便进行super block的救援
- file system description(文件系统描述说明)
- 每个block group的开始与结束block号
- 每个区段分别介于哪一个block号码之间
- block bitmap(块对照表)
- inode bitmap(inode对照表)
- inode table(inode表格
- 主要记录各个文件的基本信息
- 访问模式(read/write/excute)
- 所有者与组(owner/group)
- 大小
- ctime,atime,mtime
- 定义文件的特性标志,如SUID等
- 实际内容的指向(block号码)
- inode的特性
- inode的数量和大小在格式化时固定
- 每个inode大小都为128bytes(2^7bytes)
- 每个文件仅占用一个inode
- 文件系统能够创建的数量受到inode数量的限制
- inode每记录一个block号码占用4bytes
- 间接指向
- 再拿一个block来当记录block号码的记录区
- 类似“扩展分区”
- 系统支持最大单一文件的大小与block大小有关
- 其总额为直接、间接、双间接、三间接指向的block的大小之和
- 如对于1K的block:总额=12+256+256^2+256^3(K) = 16GB
- 2K与4K的block受到文件系统本身的限制,不能采取相同的方法计算
- data block(数据块)
- 目前支持的block大小有1K, 2K, 4K三种
Block大小 | 1KB | 2KB | 4KB |
最大单一文件限制 | 16GB | 256GB | 2TB |
最大文件系统总容量 | 2TB | 8TB | 16TB |
- 某些应用程序沿用旧限制,只支持2GB以下的单一文件,无关文件系统
- 原则上,block的大小与数量在格式化时已经固定
- 每个block至多存放一个文件的数据
- 如果文件大于block大小,将占用多个block
- 如果文件小于block大小,剩余的空间并不能被利用,磁盘空间被浪费
- 文件大小 & 占用空间
- 用“ll -s”查看目录下的数据时,第一列数据total指的是占用空间
- 用“du”查看占用空间时,-b是用bytes计算的文件大小,而-k和-m是通过block计算的占用空间
- 查询文件系统的信息:dumpe2fs
- 基本语法:dumpe2fs [-bh] devname
- -b:列出保留为坏道的部分
- -h:仅列出super block的数据,不列出其他区段
- 主要信息
- Fliesystem volume name:文件系统的命令,即Label
- Default mount option:默认挂载的参数
- Filesystem state:文件系统的状态(clean为正常,dirty为异常)
- Block size:每个block的大小(bytes)
- Inode size:每个inode的大小(bytes)
- 注意:号码都是以0为起始
- EXT2与directroy tree的关系
- 新建目录
- EXT2会分配一个inode和至少一个block给该目录
- inode记录该目录的相关权限和属性,还有分配到的block号码
- block用来记录目录下的文件名与该文件的inode号码
-
- 每新建一个目录,该目录的连接数为2(.和目录名),上层目录的连接数+1(..)
- (.)和(..)是实际存在的文件(symbolic link)而不是记号
- 如果不人为地为目录建立连接,那么 该目录下的子目录数 = 该目录连接数(包括(.)和(..))
- 新建文件
- EXT2会分配一个inode和与文件大小相对用的block数量
- inode记录该文件的相关权限和属性,还有分配到的block号码
- block用来记录该文件的实际数据
- 注意:inode仅有12直接指向,若有更多数据,需要额外占用block作为号码记录区
- 目录树读取
- 系统通过挂载信息找到挂载点的inode号码
- 读取挂载点的inode内容,找到下一层目录的inode号码
- 再读取下一层目录inode内容
- ……(以此类推,直到文件所在目录)
- 读取目录的inode内容,找到文件的inode号码
- 读取文件的inode内容,找到文件对应的block号码
- 访问相应的block,读取文件数据
-
- 注意:每次读取目录、文件的inode,会先判断是否具有相应权限,再决定是否进行一下步
- 文件系统大小与磁盘读取性能
- 由于硬盘数据经常变动,所以整个文件系统上的文件通常无法连续写在一起,而是填入式地把数据放入空白的block
- 如果文件写入的block太分散,就存在文件数据离散的问题
- 解决方法:可以把整个文件系统内的数据移出,重新格式化后把数据复制回来
- 注意:分区规划不是越大越好,应根据用途来规划
- 新建目录或文件
- 先确定用户在该目录下是否具有w与x的权限
- 根据inode bitmap找到空白的inode号码,写入新文件的权限和属性
- 根据block bitmap找到空白的block号码,将实际数据写入block中,并更新inode的block指向数据
- 将写入的inode与block数据,同步更新inode bitmap和block bitmap,并更新super block的内容
- 挂载点(mount point)
- 挂载:将文件系统与目录树结合
- 挂载点一定是目录,该目录为进入该文件系统的入口
- 文件系统必须要挂载到目录树的某个目录后才能使用
- 同一个文件系统的某个inode只能对应一个文件内容
- 我们可以通过inode号码来确认同一目录下的不同文件名是否为同一文件
- EXT3日志文件系统(journaling file system)
- 一般我们将inode table与data block称为数据存放区域
- 而super block、block bitmap、inode bitmap等区段就被称为metadata(中间数据)
- 其中数据经常变动,每次添加、删除、编辑时都可能影响这三部分的数据
- 数据不一致状态
- 由于不明原因导致系统中断,使数据存放区域与中间数据不一致
- 在EXT2文件系统中
- 系统会在重启时,会通过super block中记录的valid bit(是否有挂载)与文件系统的state(clean与否)等状态来判断是否强制用e2fsck进行数据一致性检查
- 不过这种检查相当费时,因为要搜寻整个文件系统进行数据比对
- 在EXT3文件系统中
- 规划出了一个块用来记录写入或者修订文件的步骤,万一数据记录发生问题,系统只需要检查日志记录块就可以知道问题在哪,有针对性的进行数据已执行检查,极大的缩短了修复时间
- 工作过程
- 预备:当系统要写入文件时,会先在journaling file system中记录某个文件准备要写入的信息
- 实际写入:开始写入文件的权限与数据; 开始更新meta data的数据
- 结束:完成数据与meta data数据的更新后,在日志记录块中完成该文件的记录
- 优点:可利用性、数据完整性、速度、易于转换(无需重新格式化,直接规划出一个块即可)
- 异步处理
- 系统将常用的文件数据放置到主存储器的缓冲区,以加速文件系统的读写
- 若文件没被更改过,文件数据会设置为clean
- 若文件被修改过,文件数据会设置为dirty,此时操作都在内存中进行,不定时地将内存中为dirty的数据写回磁盘中
- 可以手动使用sync命令强迫内存将dirty的数据写入磁盘中
- 正常关机时,关机命令会主动调用sync来将内存数据回写入磁盘内
- 若不正常关机,由于数据尚未回写到磁盘内,因此重启后可能会花很多时间在进行磁盘检验,甚至可能导致文件系统的损毁(不是磁盘损坏)
- Linux支持的文件系统与VFS
- 传统文件系统:EXT2、minix、MS-DOS、FAT(vfat模块)、iso9660(光盘)等
- 日志文件系统:EXT3、ReiserFS、Windows'NTFS、IBM'sJFS、SGI'sXFS
- 网络文件系统:NFS、SMBFS
- 查看支持的文件系统
- ls -l /lib/modules/$(sname -r)/kernel/fs
- 查看系统目前已加载到内存的文件系统
- Virtual Filesystem Switch(虚拟文件系统,VFS)
- Linux都是通过VFS的内核功能去读取文件系统的
- VFS能够自动识别并使用相应的文件系统模块去读取文件系统
- 查看文件系统的整体使用量:df
- 基本语法:df [-ahikHTm] dirname/filename
- -a:列出所有文件系统,包括/proc等
- 此时/proc等目录大小为0,是因为他们在内存内,不占用磁盘空间
- -k:以KB的容量显示
- -m:以MB的容量显示
- -h:自动使用GB、MB、KB的容量显示
- -H:用1000进位而非1024进位来显示
- -T:(Type)显示文件系统类型
- -i:(inode)显示inode数量,不显示磁盘容量
- 不带参数,“df”默认表示将系统内所有的(除了内存内的文件系统和swap)都以KB的容量显示出来
- 主要信息
- 1k-blocks:说明下面的数字单位是1KB
- Mounted on:挂载点
- 主要读取的是super block内的信息,所以命令的处理速度很快
- /dev/shm 目录是利用内存虚拟出来的磁盘空间,其内容开机时就被清空
- 查看文件系统的占用容量(只显示容量):du
- 基本语法:du [-ahskm] dirname/filename
- -a:列出所有的文件与目录容量
- -h:自动使用G/M的容量来显示
- -s:只列出该目录的总量
- -S:不重新计算子目录,减少计算
- -k:以KB列出容量显示
- -m:以MB列出容量显示
- -b:以bytes列出容量显示
- 不加任何参数即“du”命令为分析当前目录的文件与目录,但只显示目录容量,以KB为单位
- 该命令与df不同,是直接到文件系统内查找文件数据
- 示例:du -sm /*
- 连接文件:ln
- 连接文件有两种
- 符号连接(symbolic link)
- 类似Windows的快捷方式的新文件,两文件的inode号码不同
- 该文件内的数据只是指向的文件的路径
- 如指向/etc/crontab,路径占用12个字符,那么该符号连接文件为12bytes
- 一旦原文件被删除,该符号连接文件将无法打开
- 会占用inode和block
- 使用广泛
- 硬连接、实际连接(hard link)
- 通过文件系统的inode连接产生新文件名而不是新文件
- 两文件名不同,但却具有相同的文件信息(包括inode号码)
- 当文件名被删除时,文件数据并没有被删除,可以通过其他硬连接的文件名访问
- 只是在目录下的block多写入一个关联数据,一般不占用磁盘空间与inode数目
- 限制
- 不能跨文件系统
- 不能连接目录(目录下的文件都需要对应连接,处理复杂)
- 较安全
- 基本语法:ln [-sf] source destination
- -s:symbolic link
- -f:如果destination已存在,将主动删除source后重新创建
- 新增硬盘:分区、格式化(format)、检验文件系统、挂载
- 磁盘分区:fdisk
- 基本语法:fdisk [-l] devname
- -l:输出后面接的设备所有的分区内容
- 若省略devname即“fdisk -l”表示列出整个系统内的所有分区
- 通常先用df命令找出可用磁盘文件名,再用fdisk命令
- 进入程序后,输入m可以查看帮助菜单,无需记住命令
- 主要命令
- d:delete a partition(删除一个分区)
- partition number:选择对应的分区序号即可
- n:add a new partition(新增一个分区)
- 选择分区形式
- extended
- primary partition
- logicl
- partition number:设置分区序号
- First cylinder:设置开始柱面号,直接[Enter]表示采用default值
- Last cylinder:设置结束柱面号,直接[Enter]表示采用default值
- 除了输入柱面号,还可以直接输入磁盘分配的大小如+512M
- 系统自动计算最接近柱面号,但往往不恰好大小为512M
- p:print the partition table(在屏幕上显示分区表)
- q:quit without saving changes(离开,但不保存)
- w:write table to disk and exit(将刚才的操作写入分区表,即保存)
- 注意
- 该程序只有root能够打开,最好在单用户维护模式下操作
- devname末尾不能加上数字,分区是针对整个设备而不是某个分区
- 如果硬盘某个分区还在使用中,系统内核很可能无法重载硬盘分区表
- 此时将分区卸载,重新分区即可
- 或者重启系统
- 或者调用GNU推出的工具partprobe命名告知内容读取新的分区表
- fdisk只能处理2TB以下的磁盘分区,当磁盘分区大于2TB时就要用到程序parted
- 基本语法:parted devname [命令 [参数] ]
- 注意devname是第一个参数!!
- 主要命令
- 新增分区:mkpart [primary|logical|extended] [ext3|vfat] 开始柱面 结束柱面
- 注意:这里的柱面必须用容量表示,而不能是柱面号
- 如:parted /dev/hdc mkpart logical ext3 19.2GB 19.7GB
- 打印分区表:print
- 删除分区:rm [partition]
- 分区序号Number
- 如:parted /dev/hdc rm 8
- 简单的磁盘格式化(MaKe File System):mkfs
- 基本语法:mkfs [-t] devname
- 格式化时常用该命令,该命令使用默认值
- 复杂的磁盘格式化:mke2fs
- 基本语法:mke2fs [-b SIZE] [-i SIZE] [-L LABEL] [-cj] devname
- -b:设置block大小,后接数字(单位bytes),目前支持1024, 2048, 4096三种
- -i:设置每个inode的大小,后接数字(单位bytes)
- -c:检查磁盘错误
- 如果是“-c”,则进行快速读取测试(read)
- 如果是“-c -c”,则进行读写测试(read-write)
- -L:设置卷标,后接卷标名
- -j:主动加入journal而成为EXT3
- 磁盘检查——文件系统(File System ChecK):fsck
- 基本语法:fsck [-t TYPE] [-ACay] devname
- -t:告诉程序设备的文件系统
- 但是现在的linux会自动通过super block去分辨文件系统,基本不需要这个参数
- -A:依据/etc/fstab的内容来将设备扫描一次
- -a:自动修复检查到有问题的扇区,程序不再询问
- -y:与-a类似,但是某些文件系统只支持-y
- -C:检验过程中用一个直方图来显示目前进度
- 由e2fsck命令提供的针对EXT2/EXT3的参数
- -f:强制检查
- 一般fsck对于没有发现任何unclean标志是不会主动进入细化检查的
- -D:针对文件系统下的目录进行优化配置
- 查看系统有多少文件系统支持fsck
- fsck[tab][tab]
- 会列出文件系统相应的模块
- 注意:
- 通常只有在系统出现极大问题,导致开机时不得不进入单用户模式下进行维护行为时,才使用此命令,否则可能造成对系统的伤害
- 执行fsck时,被检查的分区必须卸载
- 检查过程中如果出现问题,有问题的数据会放在/lost+found目录下
- 执行fsck时,事实上是调用e2fsck这个软件
- 磁盘检查——坏区:badblocks
- 基本语法:badblocks [-svw] devname
- -s:显示进度
- -v:显示进度
- -w:用写入的方式来测试
- 这个命令大多不用,因为“mke2fs -c devname”在格式化时会进行磁盘表面的读取测试
- 磁盘挂载:mount
- 基本语法:mount [-a] [-l] [-t TYPE] [-L LABEL] [-o 其他选项] devname dirname
- -a:依据配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上去
- -l:增列Label名称
- “mount”显示目前挂载信息,“mount -l”增加Label名称
- -t:指定文件系统类型
- -n:本次挂载不写入/etc/mtab中
- 默认系统会将实际的挂载的情况写入/etc/mtab中,以利其他程序的运行
- 在某些情况下(例如单用户维护模式)为了避免问题,会刻意不写入
- -L:利用卷标名称来挂载
- 用卷标名来挂载的利弊
- 利:改变设备插口不会出现问题
- 弊:如果出现重复的Label会出现问题
- 如果用了Label来挂载,那么卷标不能再随意修改,否则可能导致无法正常开机
- -o:额外的文件系统参数
- ro, rw:挂载的文件系统成为只读(ro)或读写(rw)
- async, sync:设置内存机制为同步写入(async)或异步写入(sync)
- auto, noauto:是否允许此分区以mount -a自动挂载
- dev, nodev:是否允许此分区上创建设备文件
- suid, unsuid:是否允许此分区上含有suid/sgid的文件格式
- exec, noexec:是否允许此分区上拥有可执行binary文件
- user, nouser:是否允许让任何用户执行mount
- nouser(默认):只有root可执行
- user:一般用户也可以执行
- usrquota:启动文件系统支持磁盘配额模式
- grpquota:启动文件系统对群租磁盘配额模式的支持
- defaults:默认值为rw, suid, dev, exec, auto, nouser, and async
- remount:重新挂载,在系统出错,或者重新更新参数时很有用
- 【多个额外参数间用逗号(,)隔开】
- 由于文件系统几乎都有super block,linux可以自动分析super block搭配自己的驱动程序去测试挂载,所以以上大部分参数平时是不需要使用的
- 一般只需要用到mount devname dirname即可
- linux只要参考了以下两个文件
- /etc/filesystems:系统指定的文件系统类型
- /proc/filesystems:系统已挂载的文件系统类型
- 相关驱动在以下目录的设备同名子目录中
- /lib/modules/$(uname -r)/kernel/fs
- 挂载CD或DVD光盘、软盘、U盘
- 先用mkdir新建一个目录
- 再用mount挂载(可不指定类型让系统识别)
- CD或光盘的指定类型:-t iso9660
- 软盘、U盘:-t vfat
- 如果有中文文件名,可以加入-o iocharset=cp950
- 如果要挂载NTFS文件系统可以参考以下网站
- Linux-NTFSProject:http://www.linux-ntfs.org
- 下载相关驱动并安装,但是以后每次 升级系统都需要重新安装对应的驱动程序版本
- 重新挂载根目录
- 在单用户维护模式下,根目录会被系统挂载为只读
- 此时需要这样来重挂载根目录,使其可读写
- mount -o remount,rw,auto /
- 将目录挂载到另一个目录上
- 类似符号连接
- 但是有的程序并不支持符号连接,此时就需要用到挂载并加入--bind参数
- mount --bind dirname1 dirname2
- 将dirname1挂载到dirname2上,此时两个目录拥有相同的inode(与符号连接不同)
- 卸载设备文件:umount
- 基本语法:umount [-fn] dirname/mount point
- 如果进入该挂载点,即文件系统正被使用时,会提示“device is busy”而不能成功挂载
- 磁盘参数修改:mknod
- 用ls命令查看设备文件的详细信息时,文件大小会被major和minor数值替代,两者用逗号隔开
- major是主设备代码
- minor是此设备代码
- Linux内核认识的设备数据就是通过这两个数值决定的
- 常见硬盘文件名的设备代码如下
磁盘文件名 | Major | Minor |
/dev/hda | 3 | 0~63 |
/dev/hdb | 3 | 64~127 |
/dev/sda | 8 | 0~15 |
/dev/sdb | 8 | 16~31 |
- 更多设备代码参考http://www.kernel.org/pub/linux/docs/device-list/devices.txt
- Linux内核升级到2.6以后,硬件文件名已经能被系统自动实时产生,平时不需要手动创建
- 基本语法:mknod devname [bcp] [Major] [Minor]
- devname是第一个参数,而不是最后一个
- [bcp]注意是没有减号的!
- b:设置设备名称为一个外部存储设备文件,如硬盘
- c:设置设备名称为一个外部输入设备文件,如鼠标、键盘
- p:设置设备名称为一个FIFO文件
- [Major]:主设备代码
- [Minor]:次设备代码
- 设置文件系统卷标:e2label
- 基本语法:e2label devname newLabel
- 如:e2label /dev/hdc6 my_test
- 小工具:tune2fs
- 功能:读取super block数据、将ext2转换为ext3、修改文件系统的label
- 基本语法:tune2fs [-jlL] devname
- -j:将ext2转换为ext3
- -l:读取设备super block内的数据(类似dumpe2fs -h)
- -L:修改文件系统的Label(类似e2label)
- IDE硬盘的高级参数设置:hdparm
- 这个命令的参数只适用于IDE硬盘
- 而SATA硬盘最多只能用该命令来测试性能,但并不是很准确,只能作为对比参考
- 基本语法:hdparm [-icdmXTt] devname
- -i:显示内核检测到的硬盘参数
- -c:设置32bit访问模式
- -d:DMA模式
- -m:同步读取多个sector的模式,降低系统因为读取硬盘而损耗性能
- -X:UtraDMA模式
- -T:测试暂存区cache的访问性能
- -t:测试硬盘的实际访问性能
- 开机挂载/etc/fstab及/etc/mtab
- 设置开机自动挂载,直接修改文件/etc/fstab
- 限制
- 根目录/是必须挂载的,而且一定要先于其他挂载点被挂载进来
- 其他挂载点必须为已建好的目录,可以任意指定,但一定要遵守必需的系统目录架构原则
- 所有挂载点在同一时间内,只能挂载一次
- 所有分区在同一时间内,只能挂载一次
- 如果进行卸载。需要先将工作目录移到挂载点之外
- 文件主要内容——六个字段,每个字段用空格隔开即可
- 第一字段Device:磁盘设备名或该设备的Label
- 如果是Label显示格式为“LABEL=......”
- 第二字段Mount point:挂载点
- 第三字段filesystem:磁盘分区的文件系统
- 手动挂载时可以让系统自动检测
- 但是这里我们必须手动写入文件系统才行!
- 第四字段parameters:文件系统参数
- 就是mount -o的那些参数
- 如果使用默认,在此处写入defaults即可
- 第五字段dump:能否被dump备份命令作用
- 0代表不做dump备份
- 1代表每天都进行dump操作
- 2代表其他不定日期的dump操作
- 第六字段fsck:开机过程是否以fsck检验扇区
- 0:不检验
- 1:最早检验(一般只有根目录设置为1)
- 2:稍晚检验(一般其他目录设置为2)
- 系统的实际挂载情况是记录到/etc/mtab和/proc/mounts中的
- 特殊设备loop挂载
- 挂载光盘镜像文件
- mount -o loop (iso文件路径) (挂载点)
- 如mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd
- 使用完毕后要即使卸载umount
- 新建大文件来作为loop设备文件
- 相当于从有空闲的空间多划出了一个分区
- 创建大型文件:dd if=/dev/zero of=/home/loopdev bs=1M count=512
- if是input file,输入文件,/dev/zero是一个一直输出0的设备
- of是output file,将一堆零写入到该文件中
- bs是每个block的大小,类似系统的block
- count:block的数量
- 格式化:mkfs -t ext3 /home/loopdev
- 此时因为不是正常的设备,会提示“Proceed anyway?(y, n)”,输入y即可
- 挂载:mount -o loop /home/loopdev /media/cdrom
- 构建内存交换空间(swap)
- 使用物理分区来构建
- 服务器最好能预留swap来缓冲一下
- 分区
- 新建分区(假设为/dev/hdc7)
- 由于linux的fdisk默认将分区ID设置为Linux文件系统
- 所以要手动修改,将ID从83改为82即可
- 更新分区表:partprobe
- 构建swap格式:mkswap /dev/hdc7
- 加载swap:swapon /dev/hdc7
- 查看当前内存(物理内存和swap):free
- 列出目前使用的swap设备有哪些:swapon -s
- 使用文件来构建
- 新建大型文件:dd if=/dev/zero of=/tmp/swap bs=1M count=128
- 构建swap格式:mkswap /tmp/swap
- 加载swap:swapon /tmp/swap
- 卸载swap(物理分区或者文件)
- swapoff /dev/hdc7
- 或swapoff /tmp/swap
- swap的功能
- 当物理内存不够时,将某些在内存中所占用的程序暂时移动到swap当中,让物理内存可以被需要的程序使用
- Linux主机系统进入“休眠”模式后,运行当中的程序状态会被记录到swap中去,作为“唤醒”主机的状态数据
- 有些程序在运行时,会利用swap的特性来存放某些数据段
- swap使用限制
- 在内核2.4.10版本后,单一swap已经没有2GB的限制
- 最多仅能创建32个swap
- 由于目前64位系统最大内存寻址为64位(Windows支持超过哦128GB的内存),因此swap总量最大也只能达到64G