Linux磁盘管理
硬盘的物理组成
柱面
硬盘与读存数据相关的部件:圆形硬盘片(一或多个)、磁头、机械臂。 硬盘片上有磁道,多个硬盘片上的同一磁道形成柱面,这个柱面就是分区时形成的最小单位,windows的C盘(系统盘)分区就是在最外层的一堆柱面上。
扇区
硬盘上的最小存储单位叫扇区,每个扇区储存512字节。在读取数据的时候,硬盘会转动,利用机械手臂将磁头移动到正确的数据位置,然后将数据顺序读出。
硬盘的类型/dev/sda VS /dev/hda
HDA是使用了ide接口的硬盘的名称.SDA是sata接口的硬盘的名称
硬盘接口
我们通过硬盘接口来区分不同的硬盘,不同厂商生产的硬盘都要通过sata接口接入到主板的sata控制器上。使用SATA(Serial ATA)口的硬盘又叫串口硬盘,是未来和现在PC机硬盘的主流趋势。 硬盘接口有: 并口:(数据传输有n根线并行传输) IDE(电子集成驱动器):133M/S SCSI(小型计算机系统接口):640M/S 串口:(数据传输有一根线按顺序传输) SATA(串口硬盘接口):6Gbps SAS(串行连接SCSI):6Gbps USB:480MB/s
分区和目录关系
-
任何一个分区都必须挂载到某个目录上。
-
目录是逻辑上的区分。分区是物理上的区分。
-
磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
-
根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
分区
为什么要分区
-
可以把不同资料,分别放入不同分区中管理,降低风险。
-
大硬盘搜索范围大,效率低
-
磁盘配合只能对分区做设定
-
/home /var /usr/local经常是单独分区,因为经常会操作,容易产生碎片
分区的要点:
记录每一个分区的起始和结束柱面。分区的起始和结束柱面的数据放在主导区(Master Boot Recorder,MBR)。MBR不属于任何分区,计算机启动后最先读取主导区,这个区域记录硬盘的分区信息。MBR的限制是不能存储所有的分区和引导程序的信息,最多提供4个分区的记忆。
MBR处在0sector,分为三个部分: 446bytes:boot loader程序,引导启动操作系统程序 64bytes:FAT文件系统分区表,每16个字节表示一个分区 2bytes:MBR区域的有效性标识,55AA表示为有效
分区管理fdisk命令
分区类别:
查看:fdisk -l [DEVICE] 创建分区:fdisk [DEVICE] 查看内核是否识别新的分区:cat /proc/partitions 对于已经有分区处于使用的磁盘来说,新建分区要让内核重读分区:
centos5之上: #partprobe [DEVICE] centos 6和7: #part -a [DEVICE] #kpartx -af [DEVICE] n:新建分区 p:显示分区表 d:删除分区 b:设置卷标 w:写入分区表 t:改变分区文件系统类型 l:显示fdisk所支持的文件系统代码 q:退出
文件系统管理
文件系统分类
常用的Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
交换文件系统:swap
网络文件系统:nfs,smbfs
光盘文件系统:isso9660
文件系统的物理结构
super block:超级块的作用是存储文件系统大小、有多少是空的和已经填满的占多少,以及它们各自的总数和其他信息。要使用一个分区来进行数据访问,那么第一个要访问的就是超级块。所以超级块坏了,磁盘就没救了。
文件系统大小 空闲块数目 空闲块索引表 空闲i节点数 空闲i节点索引表 ……
文件存储结构
Linux正统的文件系统(如ext2、ext3)一个文件由目录项、inode和数据块组成。
-
目录项:包括文件名和inode节点号。
-
Inode:又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。
-
数据块:文件的具体内容存放地。
文件系统管理
文件系统管理工具
-
创建文件系统的工具
mkfs mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
-
检测及修复文件系统的工具
fsck fsck.ext2, fsck.ext3, ...
-
查看其属性的工具
dumpe2fs, tune2fs
-
调整文件系统特性:
tune2fs
ext系列文件系统的管理工具:
-
创建文件系统的工具
mkfs mkfs.ext2, mkfs.ext3, mkfs.ext4 mkfs -t ext4=mkfs.ext4
-
ext系列文件系统专用管理工具
mke2fs [OPTIONS] device -t {ext2|ext3|ext4}:指明要创建的文件系统类型 mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4 -b {1024|2048|4096}:指明文件系统的块大小; -L LABEL:指明卷标; -j:创建有日志功能的文件系统ext3; mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3 -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode; -N #:直接指明要给此文件系统创建的inode的数量; -m #:指定预留的空间,百分比; -O [^]FEATURE:以指定的特性创建目标文件系统;
e2label命令:卷标的查看与设定 查看:e2label device 设定:e2label device LABEL
tune2fs命令:查看或修改ext系列文件系统的某些属性 adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems; 注意:块大小创建后不可修改; tune2fs [OPTIONS] device -l:查看超级块的内容; 修改指定文件系统的属性: -j:ext2 --> ext3; -L LABEL:修改卷标; -m #:调整预留空间百分比; -O [^]FEATHER:开启或关闭某种特性; -o [^]mount_options:开启或关闭某种默认挂载选项 acl ^acl
dumpe2fs命令:显示ext系列文件系统的属性信息 dumpe2fs [-h] device
e2fsck : check a Linux ext2/ext3/ext4 file system e2fsck [OPTIONS] device -y:对所有问题自动回答为yes; -f:即使文件系统处于clean状态,也要强制进行检测;
fsck:check and repair a Linux file system -t fstype:指明文件系统类型; fsck -t ext4 = fsck.ext4 -a:无须交互而自动修复所有错误; -r:交互式修复;
blkid命令: blkid device blkid -L LABEL:根据LABEL定位设备 blkid -U UUID:根据UUID定位设备
swap文件系统:
Linux上的交换分区必须使用独立的文件系统; 且文件系统的System ID必须为82; 创建swap设备:mkswap命令 mkswap [OPTIONS] device -L LABEL:指明卷标 -f:强制 启用:swapon swapon [OPTION] [DEVICE] -a:定义在/etc/fstab文件中的所有swap设备; 禁用:swapoff swapoff DEVICE
文件系统的使用:
文件系统的使用首先要挂载:mount命令和umount命令。根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”
挂载点:mount_point,用于作为另一个文件系统的访问入口;
(1) 事先存在; (2) 应该使用未被或不会被其它进程使用到的目录; (3) 挂载点下原有的文件将会被隐藏;
mount命令:
mount [-nrw] [-t vfstype] [-o options] device dir 命令选项: -r:readonly,只读挂载; -w:read and write, 读写挂载; -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性; -t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型; -L LABEL:挂载时以卷标的方式指明设备; mount -L LABEL dir -U UUID:挂载时以UUID的方式指明设备; mount -U UUID dir -o options:挂载选项 sync/async:同步/异步操作; atime/noatime:文件或目录在被访问时是否更新其访问时间戳; diratime/nodiratime:目录在被访问时是否更新其访问时间戳; remount:重新挂载; acl:支持使用facl功能; # mount -o acl device dir # tune2fs -o acl device ro:只读 rw:读写 dev/nodev:此设备上是否允许创建设备文件; exec/noexec:是否允许运行此设备上的程序文件; auto/noauto: user/nouser:是否允许普通用户挂载此文件系统; suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效; defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
查看当前系统所有已挂载的设备:
# mount # cat /etc/mtab # cat /proc/mounts
umount命令:
umount device|dir 注意:正在被进程访问到的挂载点无法被卸载; 查看被哪个或哪些进程所战用: # lsof MOUNT_POINT # fuser -v MOUNT_POINT 终止所有正在访问某挂载点的进程: # fuser -km MOUNT_POINT
设定除根文件系统以外的其它文件系统能够开机时自动挂载:/etc/fstab文件,该文件的语法格式如下:
每行定义一个要挂载的文件系统及相关属性: 6个字段: (1) 要挂载的设备: 设备文件; LABEL UUID 伪文件系统:如sysfs, proc, tmpfs等 (2) 挂载点 swap类型的设备的挂载点为swap; (3) 文件系统类型; (4) 挂载选项 defaults:使用默认挂载选项; 如果要同时指明多个挂载选项,彼此间以事情分隔; defaults,acl,noatime,noexec (5) 转储频率 0:从不备份; 1:每天备份; 2:每隔一天备份; (6) 自检次序 0:不自检; 1:首先自检,通常只能是根文件系统可用1; 2:次级自检 ... mount -a:可自动挂载定义在此文件中的所支持自动挂载的设备;
文件系统挂载使用:挂载光盘设备: 光盘设备文件: IDE: /dev/hdc SATA: /dev/sr0 符号链接文件: /dev/cdrom /dev/cdrw /dev/dvd /dev/dvdrw mount -r /dev/cdrom /media/cdrom umount /dev/cdrom dd命令:convert and copy a file 用法: dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=#:block size, 复制单元大小; count=#:复制多少个bs; 磁盘拷贝: dd if=/dev/sda of=/dev/sdb 备份MBR dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 破坏MBR中的bootloader: dd if=/dev/zero of=/dev/sda bs=256 count=1 两个特殊设备: /dev/null: 数据黑洞; /dev/zero:吐零机;
挂载点和/etc/fstab
作用:
配置文件系统体系
被mount、fsck和其他程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷边
使用mount -a 命令挂载/etc/fstab中所有的文件系统
实例演示:
增加两个逻辑分区,一个交换分区,并配置到/etc/fstab下
1.查看分区情况:fdisk -l 2.建立两个逻辑分区,过程省略
3.建立交换分区
查看swap大小(free -k|-m|-G)
创建一个swap分区
这是创建了1个一个扩展分区,三个逻辑分区,现在将sda7转化为swap分区
创建完了之后,我们用mkswap命令格式化我们的新分区。
然后我们都做好分区用blkid后看一下 接着配置挂载 开机重启,mount -a之后,df -h,可以看到挂载成功
笔者,再配置swap分区的时候出了一点问题,我在创建系统的时候 建立了一个swap分区 后来 我又建立了一个swap分区 并且配置fstab文件,配置没有显示我挂载到指定目录,然后我用同样的方法 测试了一下 普通分区 配置fstab文件,成功了 ,开机启动看到了挂载在我指定的目录下,现在我把 原来配置的swap 分区去掉 比较前后两次的swap 总数,发现不一样 ,论证了 如果挂载两个swap分区 会合并在一起。得出结论是,最好只要一个swap。
操作练习
1、创建一个20G的文件系统,块大小为2048,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项;
(1) 创建20G分区; (2) 格式化: mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE (3) 编辑/etc/fstab文件 LABEL='TEST' /testing ext4 defaults,acl 0 0
2、创建一个5G的文件系统,卷标HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3;
3、写一个脚本,完成如下功能: (1) 列出当前系统识别到的所有磁盘设备; (2) 如磁盘数量为1,则显示其空间使用信息;否则,则显示最后一个磁盘上的空间使用信息;
if [ $disks -eq 1 ]; then fdisk -l /dev/[hs]da else fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh]d[a-]" | tail -1 | cut -d' ' -f2) fi
原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/60362
评论列表(1条)
用自己的方式来理解知识,往往是最容易掌握的,加油。