一、磁盘物理结构
1. 磁盘 :由一个个盘片构成 , 从盘片的结构上看 , 图中的一圈圈灰色同心圆为一条条磁道 , 从圆心向外画直线 , 可以将磁道划分为若干个弧段 , 每一个磁道上一个弧段被称为一个扇区 , 扇区是磁盘的最小组成单元 , 通常是512字节 。
2.
2. 磁盘分区: 指定分割区域起始与结束磁柱
3. 磁盘分区是告诉操作系统 , 磁盘在此分割区域内 。 例如A磁柱到B磁柱之间的区块 , 如此一来 , 操作系统灸能够知道他可以指定区块进行文件读写查询操作 。
4. 格式化: 因为每种操作系统所设定的文件属性\权限 , 以及存放数据的格式不同 , 所以使用硬盘之前需要进行格式化 。
二、 文件系统
- Ext2\Ext3\Ext4的区别
- 这三个都是文件系统格式
- Linux kernel自2.6.28开始正式支持新的文件系统Ext4
- Ext4是Ext3的改进版 , 修改了Ext3中部分重要的数据结构 。
- Ext3相比于Ext3而言 , 只是增加了一个日志系统而已 。 Ext4可以提供更佳的性能和可靠性 ,还有更为丰富的功能 , 更大的文件系统和文件 。
- 较之Ext3所支持的最大16TB文件系统和最大2TB文件 , Ext4分别支持1EB(1048576TB 1EB = 1024PB 1PB = 1024TB)的文件系统和16TB的文件 。
- Ext3只支持32000个子目录 ,而Ext4支持无限数量的子目录 。
- Extents(区段)
- Ext3采用间接块映射 , 当操作大文件时 , 效率极其低下 , 比如一个100MB的文件 , 在Ext3中要建立25600个数据块(每个数据块为4kb)的映射表 。在Ext3中 , 每个物理块都要一个逻辑结构与之相对应。
- Ext4引入了Extents的概念 。 提高效率 。 每个Extents为一组连续的数据块 , 理想情况下 , 上述文件则只需要一个Extent来记录映射挂关系 。
- 多块分配
- 当写入数据到Ext3文件系统中时 , Ext3的数据块分配器每次只能分配一个4kb的块 , 写一个100MB的文件就要调用25600次数据块 , 而Ext4的多块分配器支持一次调用分配多个数据块 。
- 延迟分配
- Ext3的数据块分配策略是尽快分配 。 而Ext4的分配策略是尽可能的延迟分配 。 知道文件在catch中 写完才开始分配数据块写入磁盘 。
- 如此能优化整个文件的数据块分配 , 显著提升性能 。
- 快速fsck(文件系统检查)
- 老的fsck会很慢 , 因为他要检查所有的inode
- Ext4给每个组的inode表中过他们 , 而只是去检查那些在用的inode添加了 一份未使用的inode的列表 , 执行fsck就可以跳。
- 日志校验
- 日志是最常用的部分,也极易导致磁盘硬件故障 , 而从损坏的日志中 恢复数据会导致更多的数据损坏 。
- Ext4的日志校验功能可以很方便的判断日志数据是否损坏 , 将过去两阶段日志机制合并成一段 , 提高性能 。
- 两阶段日志提交:
- 文件系统将准备执行的事务的具体内容写入日志
- 文件系统进行操作
- 操作成功之后, 将事务的具体内容从日志中删除 。
- 无日志(Nojournaling)模式
- Ext4允许关闭日志 , 以便某些有特殊需求的用户可以借此进一步提升性能 。
- 在线碎片管理
- Ext4支持在线碎片整理 , 并提供e4defrag工具进行个别文件或整个文件系统的碎片整理 。
- inode相关特性
- Ext4支持更大的inode , 较之Ext3默认的inode大小128字节 , Ext4为了在inode中容纳更多的扩展特性(如纳秒时间戳或inode版本) , 默认inode大小为256字节
- 持久预分配
- P2P软件为了 保证下载文件有足够的空间存放 , 常常会预先创建一个与下载文件相同的空文件 , 以免未来的数小时或 数天之内磁盘空间不足导致下载失败。 Ext4在文件系统层面实现了持久预分配并提供相应的API , 比应用软件自己实现更有效率。
-
swap介绍
- 使用磁盘存储 , 内存不够而”溢出”的内容 。
- 当系统的物理内存不够用的时候 , 就需要将物理内存中的一部分空间释放出来 , 以供当前运行的程序使用。
- 最容易成为被释放的对象 : 一些很长时间没有操作的程序 。 一些被释放的空间被临时保存在Swap空间中 。 等到那些被换出的程序要继续运行时 , 再从Swap中恢复保存的数据到内存中 。
- 一般来说可以按照如下规则设置Swap大小:
- 4G的物理内存 , SWAP设置为内存的2倍 。
- 4G-8G的物理内存 , SWAP设置为内存相同大小
- 8G-64G的物理内存 , SWAP设置为8G
- 64G-256G的物理内存 , SWAP设置为16G
-
系统什么时候会使用swap?
-
实际上并不是等所有的物理内存全部消耗完之后 , 才去使用swap空间
[root@localhost ~]# cat /proc/sys/vm/swappiness
60
默认值是60 。 swappiness = 0时表示最大限度的使用物理内存 , 然后才是swap空间 , swappiness = 100 时 表示积极使用swap空间 , 并且把内存上的数据及时搬运到swap空间
-
修改swap参数:
-
临时性修改
[root@localhost ~]#sysctl vm.swappiness = 10
vm.swappiness = 10
[root@localhost ~]# cat /proc/sys/vm/swappiness
10
这里已经做了修改 , 但是重启系统之后又会变成60 。
-
永久修改
在/etc/sysctl.conf文件中添加如下参数 : vm.swappiness = 10
操作:
[root@localhost ~]# vim /etc/sysctl.conf
按i
写入vm.swappiness = 10
按esc
输入wq(保存并退出)回车
-
swap开启与关闭
开启
swapon -a
关闭
swapoff -a
三、文件系统的操作
-
挂载点
- 每个文件系统都有独立的 inode/block/superblock等信息 , 这个文件系统要能够链接到目录树才能被我们使用 。 将文件系统和目录树结合的动作称为挂载 。
- 挂载点一定是目录 , 此目录为文件系统的入口 。
- mount命令 : 将设备挂载到某个目录
- mount常用参数
- -t : 指定设备的文件系统类型
- Ext4 linux目前常用的文件系统
- nfs 网络文件系统
- iso9660 CD-ROM光盘标准文件系统
- auto 自动检测文件系统
- -o 指定挂载文件系统时的选项
- ro 以只读的方式挂载
- rw 以读写方式挂载
- umount :卸载目录或是挂载点
-
实例:
[outman02@bogon tj]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 8.6G 2.5G 5.7G 31% /
tmpfs 491M 228K 491M 1% /dev/shm
/dev/sda1 291M 34M 242M 13% /boot
[outman02@bogon tj]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 8.7G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
[outman02@bogon tj]$ su
Password:
[root@bogon tj]# mount /dev/sda1 /tj/udisk
mount: mount point /tj/udisk does not exist
[root@bogon tj]# mount /dev/sda1 outman02/tj/udisk
mount: mount point outman02/tj/udisk does not exist
[root@bogon tj]# ll
total 12
drwxr-xr-x. 2 root root 4096 Nov 2 06:02 a
drwxr-xr-x. 2 root root 4096 Nov 2 06:02 b
drwxr-xr-x. 2 root root 4096 Nov 4 23:53 udisk
[root@bogon tj]# mount /dev/sda1 /udisk
mount: mount point /udisk does not exist
[root@bogon tj]# mount /dev/sda1 udisk
[root@bogon tj]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 8.7G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
[root@bogon tj]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 8.6G 2.5G 5.7G 31% /
tmpfs 491M 228K 491M 1% /dev/shm
/dev/sda1 291M 34M 242M 13% /boot
/dev/sda1 291M 34M 242M 13% /home/outman02/tj/udisk
**如果挂载后查看U盘内容出现乱码**
[root@bogon tj]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
[root@bogon tj]# man mount
[root@bogon tj]# mount -o iocharset=utf-8 /dev/sda1 /home/outman02/tj/udisk
- /etc/fstab文件:开机一道的时候自动挂载到Linux的文件系统 。
-
df :列出文件系统整体磁盘使用情况
- -a : 列出所有文件系统
- -k : 以Bytes对的容量显示文件系统
- -m : 以MBytes的容量显示文件系统
- -h : GBytes、MBytes、KByte等格式自行显示
-
-i : 以inode数量显示
[root@bogon tj]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 8985528 2600612 5928468 31% /
tmpfs 502204 228 501976 1% /dev/shm
/dev/sda1 297485 34642 247483 13% /boot
/dev/sda1 297485 34642 247483 13% /home/outman02/tj/udisk
[root@bogon tj]# df -a
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 8985528 2600612 5928468 31% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
tmpfs 502204 228 501976 1% /dev/shm
/dev/sda1 297485 34642 247483 13% /boot
none 0 0 0 - /proc/sys/fs/binfmt_misc
vmware-vmblock 0 0 0 - /var/run/vmblock-fuse
/dev/sda1 297485 34642 247483 13% /home/outman02/tj/udisk
[root@bogon tj]# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 8985528 2600628 5928452 31% /
tmpfs 502204 228 501976 1% /dev/shm
/dev/sda1 297485 34642 247483 13% /boot
/dev/sda1 297485 34642 247483 13% /home/outman02/tj/udisk
[root@bogon tj]# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/sda2 8775 2540 5790 31% /
tmpfs 491 1 491 1% /dev/shm
/dev/sda1 291 34 242 13% /boot
/dev/sda1 291 34 242 13% /home/outman02/tj/udisk
[root@bogon tj]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 8.6G 2.5G 5.7G 31% /
tmpfs 491M 228K 491M 1% /dev/shm
/dev/sda1 291M 34M 242M 13% /boot
/dev/sda1 291M 34M 242M 13% /home/outman02/tj/udisk
-
du : 文件系统的磁盘使用量或是目录使用量
- -a : 列出所有文件的目录容量
- -h : 以人们易读的格式(G/M)显示
- -s : 列出总量 , 而不列出每个个别目录占用容量
- -k : 以Bytes列出容量显示
-
-m : 以MBytes列出容量显示
[root@bogon tj]# du
251 ./udisk/efi/EFI/redhat
24439 .
[root@bogon tj]# du -a
3 ./udisk/grub/splash.xpm.gz
16 ./udisk/grub/reiserfs_stage1_5
2 ./udisk/grub/device.map
1 ./udisk/grub/menu.lst
276 ./udisk/grub
24427 ./udisk
4 ./a
4 ./b
24439 .
[root@bogon tj]# du -h
13K ./udisk/lost+found
276K ./udisk/grub
24M ./udisk
24M .
[root@bogon tj]# du -s
24439 .
[root@bogon tj]# du -k
24427 ./udisk
4 ./a
4 ./b
24439 .
[root@bogon tj]# du -m
1 ./udisk/efi/EFI/redhat
1 ./b
24 .
-
dumpe2fs : 观察文件系统
-
dumpe2fs [options]
-
-h : 仅列出superblock的数据 , 不会列出其他区段的内容
[root@localhost ~]#dummpe2fs -h /dev/sda1