您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页linux磁盘管理

linux磁盘管理

来源:意榕旅游网
linux磁盘管理学习笔记(上)

要玩儿转linux,磁盘管理是必须的,为期三篇的文章,就详细将一下Linux磁盘管理吧。 本篇主要讲一下磁盘的相关基础知识。

首先说说硬盘基础知识

硬盘最小的物理组成单位为扇区(sector),数个扇区组成同心圆时,就成为柱面(cylinder)。

1个硬盘分为两个区域,一个是MBR(主引导分区),一个是数据区域。

MBR里记录了两个重要信息,分别是引导程序与磁盘分区表。

分区表定义了“第n个磁盘块是从第x个柱面到第y个柱面”,所以,系统每次都取n磁盘块时,就只会读取第x到第y个扇区之间数据。

由于MBR容量有限,设计的时候,就只有设计成4个分区记录,4个主分区或者3个主分区和一个扩展分区。

如果超过四个分区,系统允许在额外的硬盘空间放另一份磁盘分区信息,那就是扩展分区,当硬盘被出一个扩展分区的时候,实际上扩展分区在MBR磁盘分区表中的信息为另外那份分区表的位置。所以,在扩展分区里面还要划分逻辑分区才能使用。

主分区每个硬盘最多只允许4个,其他的分区只能放在扩展分区中。

一个磁盘扇区512个字节,操作系统引进逻辑块概念,加快磁头读取扇区速度,一个逻辑块只能保存1个文件,如果分配磁盘空间的时候,划分大块,而存储的都是小文件,就会造成磁盘空间浪费。

磁盘分区时,每个分区就是一个文件系统,每个文件系统的第一个块,为超级块,保存了当前文件系统的相关信息。

磁盘的基本知识就是这样啦,windows和Linux是通用的,在windows下也是只能建立4个分区的。

下面再讲讲linux下的文件系统ext2

ext2文件系统把linux文件分为属性和内容两部分,在ext2中,分为inode和块分别存储文件的属性(包括属性信息,文件内容块指针)和文件内容。所以,分区格式化为ext2时,就必须要指定inode与块大小。

接下来说说linux如何读取一个文件内容 目录:

建立一个目录时,ext2给该目录分配一个inode和至少一个块。inode记录该目录的相关属性,和目录的块指针。块记录在这个目录下的相关文件(或目录)的关联性。 文件:

建立文件时,ext2会给该文件分配至少一个inode与对于该文件大小的块数量。inode本身不记录文件名,而是记录文件的相关属性,文件名记录在目录所属块块中。文件相关连接都会记录在目录块数据区。所以读取一个文件内容时,linux会先由根(/)递归获取该文件的上级目录所在inode,再由该目录所记录的文件关联性获取该文件的inode,最后通过inode内提供的块指针来获取最终文件内容。

一个分区所能容纳的最大文件数和inode的数量有关,因为一个文件至少占一个inode。

一个目录下面的文件数太多,无法容纳所有相关信息,linux就会给予该目录多个块继续记录关联数据。

通常inode数量设置为“分区容量”除以“一个inode预计要控制的容量”。 比如:

若块规划为4K,假设一个inode控制两个块,即一个文件大小在8k左右,分区容量为1G,则inode数量inode数量有:(1G*1024M/G*1024K/M)/(8K)=131072个。而一个inode占128个字节,则inode表为16M,也就是说1G分区,没有使用前,已经少了16M容量。

因此inode数量比块多是没有意义的。

块越小,inode数量越多,可利用的空间就越多,但大文件写入的效率就差,适用于小文件系统。 块越大,inode数量越少,大文件写入效率较好,但可能浪费更多时间,使用大文件系统。

基础知识就是这么多啦,相信大家对Linux磁盘管理有了大体的了解,接下来几篇就会讲讲linux磁盘管理的具体操作命令了。

linux磁盘管理学习笔记(中):df命令、du命令

windows下我们可以很方便很感性得得知磁盘分区大小,目录、文件所占的磁盘空间等信息,有了这些信息我们就能更好的进行文件和磁盘空间管理,而linux下就不是那么友好了,需要敲各种命令,本文就要讲讲磁盘管理最基本的查看磁盘容量、目录大小的命令啦。

查看磁盘与目录的容量 df [-ahikHTm] [目录或文件名] 参数:

-a 列出所有的文件系统,包括系统特有的/proc等文件系统。 -k 以KB为单位显示个文件系统 -m 以mb为单位显示各文件系统 -h 以gb、mb、kb等格式显示

-T 联通该分区的文件系统名称一起列出。 -i 以inode数量来显示

如果没有参数则列出系统所有分区容量

df命令结果:

Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 5036284 3080844 1699608 65% / none 2075720 0 2075720 0% /dev/shm /dev/sda2 6048352 100284 5640828 2% /home /dev/sda6 50276536 40195268 7527340 85% /opt /dev/sda3 5036316 1202280 3578204 26% /var /dev/md1 141122104 69950224 64003284 53% /database 列说明:

Filesystem 表示该文件系统在哪个分区,所以列出设备名称 1k-blocks 说明下面数字单位是1kb,可使用-h或-m来改变容量单位 Used 已使用的硬盘空间 Available 剩下的磁盘空间大小

Use% 使用率,如果使用率达90%以上就要小心啦 Mounted on 挂载点

硬盘的代号是与IDE或SATA插槽有关系的。

硬盘的标记就用/dev/hd[a~d]之类表示,如第一个插槽的硬盘就是/dev/hda,第二个插槽的硬盘就是/dev/hdb。

划分分区后,分区在linux下的表示如下: /dev/hda[1~n]

就是在硬盘标识后面加上数字,这里要注意的一点就是扩展分区也要占一个数字。

比如,硬盘分为一个主分区,一个扩展分区,扩展分区中有3个逻辑分区。那么分区的分配分别如下: 主分区为/dev/hda1 扩展分区为/dev/hda2

扩展分区里面的逻辑分区分别为/dev/hda3 /dev/hda4 /dev/hda5

查看某个目录所占空间大小命令: 语法:

du [-ahskm] [目录名]

不加任何参数,递归列出当前目录下每个目录及其子目录所占空间大小。 后接目录名则列出指定目录下每个目录及其子目录所占空间大小。 参数:

-a 列出目录和文件的大小 -h 以易读方式表示大小

-s 只列出总量而不列出子目录大小

一般使用 du -sh 来获取数据 du -sh /*

表示显示根目录下所有目录所占大小

通过上面讲的df和du两个命令再加上我们常用的ls命令,就可以对linux下的磁盘容量目录文件大小进行全面查看了。

前面两篇文章讲了大半天,其实磁盘管理的第一个步骤应该是磁盘分区,分了区,格式化分区之后才能安装系统,才能开始使用。本文呢就详细讲讲linux下的分区。 基本命令 fdisk [-l] 设备名 参数:

-l 输出指定设备的分区内容,如果fdisk -l 后面没有设备名,则把整个系统搜索到的全部设备分区列出来 例子:列出硬盘/dev/hda的分区情况 [root@www ~]# fdisk -l /dev/hda

Disk /dev/hda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System /dev/hda1 * 1 14462 116165983+ 83 Linux /dev/hda2 14463 14593 1052257+ 82 Linux swap 列说明: device 分区 boot 启动分区标识

start end 分区的开始与结束的柱面号。 blocks 块数量

id 文件系统格式的代号,(用fdisk命令l 可以知道系统所能辨识的文件系统)

fdisk分区命令

[root@www ~]# fdisk /dev/hda

The number of cylinders for this disk is set to 14593. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):

这个画面是分区工具的操作提示。

接下来按下m,回车,列出fdisk的所有命令: Command (m for help): m Command action

a toggle a bootable flag b edit bsd disklabel

c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition

o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)

Command (m for help):

比较重要的命令有: n 新增一个分区

p 列出当前分区(相当于fdisk -l 设备名) d 删除一个分区 q 不存储离开

w 写入分区表后离开。

删除分区: fdisk /dev/hdb 进入界面 按下命令:d

这时会让你选择分区,你要输入分区的数字号码。

Partition number (1-4): 2 我们选择2分区,回车

新增分区: fdisk /dev/hdb

进入fdisk画面,输入命令n Command (m for help): n #选择是创建主分区还是扩展分区 Command action e extended

p primary partition (1-4) 我们输入:p

Partition number (1-4): 4 编号随意,回车就是默认值

First cylinder (3634-3736, default 3634): <--柱面信息,回车就是默认值 Using default value 3634

Last cylinder or +size or +sizeM or + sizeK (3634-3736, default 3736):+100M

#此处,是要输入分区的结束柱面,我们不能很好知道柱面量和大小的关系,可以输入+100M这种形式来让系统自动划分柱面。 #最后,按w保存修改

磁盘格式化: 命令:

mke2fs [-bicLj] 设备名称 参数:

-b 设置块大小,支持 1024 2048 4096 三种 默认为4096 -i 给一个inode的容量大小

-c 检验磁盘错误,-c 会进行快速读取测试(相当于快速格式化) -c -c 就会进行读写测试,很慢 -L 后接卷标名称,设置分区卷标

-j mke2fs是EXT2格式化,如果加上-j就变成EXT3文件系统格式化 例子:

mke2fs -j -L \"myMusic\" /dev/hda3

其他文件系统格式化要使用mkfs命令

通过上面的讲解linux分区知识就这些啦,我们分了区,格式化了磁盘,得把他挂在到一个目录下才能使

用,而不像windows一样格式化就是一个盘符了,linux可以把一个分区挂载到任何目录滴。

在linux中,任何可访问存储设备必须进行载入,加载到指定的加载点,才能使用。比如光驱、U盘、新的硬盘分区等

挂载命令:

mount [-at] 设备名称 挂载点 参数:

-a 按照 /etc/fstab的内容将所有相关设备挂载

-t 指定挂载点的的文件系统类型,linux所支持的文件系统类型在 /lib/modules/'uname -r'/kernel/fs目录中。 例子

挂载光盘: mkdir /mnt/cd

mount /dev/cdrom /mnt/cd 挂载硬盘分区: mkdir /mnt/hdb5

mount -t ext3 /dev/hdb5 /mnt/hdb5

卸载挂载点:

umount 挂载点或设备标识

开机自动挂载

修改/etc/fstab就可以了 要求:

1)根目录/必须载入,而且要先于其他载入点被载入 2)其他载入点必须为已建立的目录

3)若进行卸载,必须先将工作目录移到载入点及其子目录之外

下面是/etc/fstab的实例

# This file is edited by fstab-sync - see 'man fstab-sync' for details LABEL=/1 / ext3 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0

LABEL=SWAP-hda2 swap swap defaults 0 0

第一列为设备号或该设备的卷标 第二列为挂载点 第三列为文件系统 第四列为文件系统参数

第五列为是否可以用demp命令备份。0:不备份,1:备份,2:备份,但比1重要性小。设置了该参数后,Linux中使用dump命令备份系统的时候就可以备份

相应设置的挂载点了。

第六列为是否在系统启动的时候,用fsck检验分区。因为有些挂载点是不需要检验的,比如:虚拟内存swap、/proc等。0:不检验,1:要检验,2要检验,但

比1晚检验,一般根目录设置为1,其他设置为2就可以了。

好啦,到此为止,linux的磁盘管理笔记就算勉强记录下来啦。仅供大家参考。

linux磁盘管理学习笔记补充:连接ln、虚拟内存

前几天发了几篇自己学习linux磁盘管理的笔记,磁盘管理就基本上那些东西啦。今天补充点磁盘管理相关的两个比较重要的东西:连接、虚拟内存。 先说说连接吧

有人问,连接是啥哦,说白了,就是相当于windows的快捷方式。要详细了解,就继续往下看吧。

linux连接文件分为硬连接和符号连接两种。 硬连接:

在某个目录下创建到某个文件的硬连接只是在该目录下新增一个该文件的关联数据(inode信息)而已。 比如:

为/root/a.txt做个硬连接/home/test/b.txt,这样一来,/root/a.txt 和 /home/test/b.txt 都是同一个文件,只是两个目录(/root和/home/test)记录了a.txt 和b.txt共同

指向的文件的关联数据,或者说此文件的inode数据。

硬连接的好处是安全,只要有一个和文件的关联信息存在文件就不会被删除。 缺点是不能跨文件系统,不能连接目录。 符号连接:

相当于windows的快捷方式,就是建立一个独立的文件,这个文件会让外部处理这个文件数据的时候只想它所连接的文件数据。 建立连接命令语法:

ln [-sf] 要做连接的文件 连接文件

为要做连接的文件建立连接文件。如,为/root/a.txt建立符号连接/home/t.txt命令: ln -s /root/a.txt /home/t.txt 如果没有参数,默认是建立硬连接 参数: -s 符号连接

-f 强制建立连接文件,如果已存在,则覆盖

接下来说说虚拟内存

虚拟内存就是在磁盘上建立个文件,作为磁盘缓冲,作为系统内存的补充。

建立虚拟内存文件 步骤1:

用dd命令建立swap文件

dd if=/dev/zero of=/tmp/swap bs=4k count=16382 其中:

dd 用于转换文件并且用于复制 if 是要输入的文件格式 of 要输出的文件 bs 一个块所占KB

count 分配多少个块, 容量为bs*count 步骤2:

使用mkswap将/tmp/swap文件格式化为虚拟内存文件格式 mkswap /tmp/swap 步骤3:

使用swapon启动/tmp/swap swapon /tmp/swap

也可以将这句放到/etc/rc.d/rc.local中,作为启动加载。

关掉swap文件 swapoff /tmp/swap

啊,又讲完啦,没什么太复杂的东。

题外话,最近感觉自己的文章很水,得增加质量了,一个人高不了那么多东西,唉,真希望有人能加入sourcejoy,和大家一起分享代码的乐趣。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务