硬盘与读存数据相关的部件:圆形硬盘片(一或多个)、磁头、机械臂。 硬盘片上有磁道,多个硬盘片上的同一磁道形成柱面,这个柱面就是分区时形成的最小单位,windows的C盘(系统盘)分区就是在最外层的一堆柱面上。
硬盘上的最小存储单位叫扇区,每个扇区储存512字节。在读取数据的时候,硬盘会转动,利用机械手臂将磁头移动到正确的数据位置,然后将数据顺序读出。
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
记录每一个分区的起始和结束柱面。分区的起始和结束柱面的数据放在主导区(Master Boot Recorder,MBR)。MBR不属于任何分区,计算机启动后最先读取主导区,这个区域记录硬盘的分区信息。MBR的限制是不能存储所有的分区和引导程序的信息,最多提供4个分区的记忆。
MBR处在0sector,分为三个部分:
446bytes:boot loader程序,引导启动操作系统程序
64bytes:FAT文件系统分区表,每16个字节表示一个分区
2bytes:MBR区域的有效性标识,55AA表示为有效
查看: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
创建文件系统的工具
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定位设备
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 [-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 device|dir
注意:正在被进程访问到的挂载点无法被卸载;
查看被哪个或哪些进程所战用:
# lsof MOUNT_POINT
# fuser -v MOUNT_POINT
终止所有正在访问某挂载点的进程:
# fuser -km MOUNT_POINT
每行定义一个要挂载的文件系统及相关属性:
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下
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