(克隆)Linux7-ext4分区预留空间的作用及大小的调整

(克隆)Linux7-ext4分区预留空间的作用及大小的调整,第1张

原文地址:https://blog.qzze.com/1347.html大多数文件系统都会保留一部分预留空间,而ext3、ext4也一样会存在一部分的预留空间,并且这部分的预留空间的大小能占到整块硬盘的5%,可以说占用的空间相当的大。 对于为什么预留这部分空间最核心的说法是预留空间主要是防止空间被占用时,root用户无法登录,一些系统相关的以root身份运行的进程没有足够的空间运行而导致系统崩溃,这种说法是单纯的对于系统盘来说,但还有一种说法是保留5%的预留空间是为了保证没有文件碎片设计的,所以不建议降低,当然网上还有很多别的说法,总体来说大家都一致认为非系统盘没必要保留这5%的空间,100G的数据盘可就少了5个G,没必要保留,我们就得研究下怎么把这部分预留空间给释放出来了。 对于这部分预留空间的释放我们首先要有root的权限,然后执行以下命令便能快速无损的释放预留空间了。 命令中的1是意思是设置预留空间为整块硬盘的1%,我个人更喜欢直接把这个参数改成0,那样就把预留空间给全部释放掉了,当然你也可以在格式化硬盘的时候去设置这个百分比。 这样在格式化的时候就把预留空间设置成了0%,也就是不保留预留空间,把预留空间全部释放掉了,当然还有种方法就是直接利用-r选项来设置预留空间为多少个磁盘块,例如可以直接设置预留空间为1000个磁盘块,我们可以执行下面的命令。 以上便是ext4系统预留空间的调整和释放的全部内容,不过既然文件系统全都有一部分的预留空间,那么他就肯定有存在的意义,在硬盘够用的情况下,还是建议大家保留这部分的预留空间。

要想在内核中保留一个块内存,不被系统分配,而是只由自己使用,可以使用以下函数

reserve_bootmem(addr,size,flag)

这个函数的三个参数,addr是你要保留的地址,size就是要保留的大小,flag是标志位,要来确定是否检查你要保留的空间是否已经被保留了,它可以设置为两个值,BOOTMEM_DEFAULT和BOOTMEM_EXCLUSIVE,前者就是总是会返回0(也就是保留成功),而后者则会检查你所要保留的空间是否已经被保留了,若已经被保留了,则它返回失败(负数)

那么这个函数一般放在哪里使用过了,我们建议放到内核init/main.c中,在页表的建立之前进行保留,比如我们下面的代码,放在main中的start_kernel函数中,我们的内核是2.6.32

asmlinkage void __init start_kernel(void)

{

……

……

trap_init()

if(reserve_bootmem(0x41000000,0x100000,BOOTMEM_EXCLUSIVE) != 0){

printk("reserve fail----\n")

}

printk("we reserve boot meme of 0x41000000 for gps---------------------------------\n")

mm_init()

……

……

}

这样就保留了一个起始地址为0x41000000,大小为1M的空间

Linux系统提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。在Linux系统中,进程的4GB内存空间被分为两个部分——用户空间与内核空间。用户空间的地址一般分布为0~3GB(即PAGE_OFFSET,在Ox86中它等于OxC0000000),这样,剩下的3~4GB为内核空间,用户进程通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。用户进程只有通过系统调用(代表用户进程在内核态执行)等方式才可以访问到内核空间。每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。内核空间的虚拟地址到物理地址映射是被所有进程共享的,内核的虚拟空间独立于其他程序。Linux中1GB的内核地址空间又被划分为物理内存映射区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区这几个区域。对于x86系统而言,一般情况下,物理内存映射区最大长度为896MB,系统的物理内存被顺序映射在内核空间的这个区域中。当系统物理内存大于896MB时,超过物理内存映射区的那部分内存称为高端内存(而未超过物理内存映射区的内存通常被称为常规内存),内核在存取高端内存时必须将它们映射到高端页面映射区。Linux保留内核空间最顶部FIXADDR_TOP~4GB的区域作为保留区。当系统物理内存超过4GB时,必须使用CPU的扩展分页(PAE)模式所提供的64位页目录项才能存取到4GB以上的物理内存,这需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以后的CPU允许内存最大可配置到64GB,它们具备36位物理地址空间寻址能力。由此可见,对于32位的x86而言,在3~4GB之间的内核空间中,从低地址到高地址依次为:物理内存映射区隔离带vmalloc虚拟内存分配器区隔离带高端内存映射区专用页面映射区保留区。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8425652.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-16
下一篇2023-04-16

发表评论

登录后才能评论

评论列表(0条)

    保存