别人的Linux私房菜(8)Linux磁盘与文件系统管理
虚拟机的磁盘通常为:/dev/vd[a-p]
LVM和软件磁盘阵列 software RAID可以将一个分区格式化为多个文件系统或者多个分区格式化为一个文件系统。
索引式文件系统中:如ext2、ext3等
文件系统初始已经将inode和数据区块规划好,不再变动。
在磁盘的整体规划分区过程中,文件系统最前有启动扇区。之后为一个个块(block group)。在block group下有:
超级区块:记录文件系统的整体信息,数据区块与inode的总量(已使用,未使用)。区块大小(1k 2k 4k)。挂载时间。是否挂载有效位数值。
inode:记录文件的属性,一个文件占用一个inode。
文件读写属性,拥有者,大小,建立改变时间,最近读取时间,修改时间,文件uid,指向等。
inode大小在ext2中为128B。(ext4或xfs有256B)。inode记录一个区块使用4B。
inode区域定义了12个直接。1个间接,1个双间接,1个三间接。
以1k每block算,寻址大小为:1k*12+1024B/4B *1k + (1024B/4B *1k)*1024/4*1k + ((1024B/4B *1k)*1024/4*1k)*1024/4*1k =16G。
计算受到文件系统的影响会有差异。
数据区块:记录实际的文件内容 ,在ext2文件系统中,每个block的大小影响了最大磁盘容量和单文件的大小限制。
如block大小为1k(2k 4k),则单一文件最大16G,总容量最大2T。大小识别,还受到软件的限制。
文件系统描述说明:
记录该区开始与结束位置,每个区段的位置,可以用dumpe2fs观察(ext2~4使用)xfs不能用。
区块对照表:
记录使用的和未使用的区块
inode对照表:
记录使用和未使用的inode号码
其它的文件系统:如fat格式,
每个区块号码记录在前一个文件区块中,像链表。可能磁盘转一圈无法获得所有的数据。需要碎片整理等。
ls -li列出文件占用的inode号码
建立目录和文件时,文件系统分配一个inode和至少一个区块给目录。
读取文件的流程为:读取相应的目录和区块,直到最后一层的文件。
新增文件首先确定目录权限wx,分配inode对照表和区块对照表,写入inode和数据区块。更新元数据(inode对照表和区块对照表,超级区块)
ext2之后的ext3和ext4加入了日志式文件系统,记录写入或修改文件的步骤,简化一致性检查的过程。e2fsck软件可以进行检查一致性。
系统会将内存中被改过的数据文件(dirty)不定时写回磁盘,保持磁盘与内存数据一致性。通过sync命令强制执行写回,正常关机执行了sync命令。
挂载点为目录,作为进入该文件系统的入口,通过inode判断不同文件名是否为相同文件
ls -l /lib/modules/$(uname -r)/kernel/fs 查看linux支持的文件系统
cat /proc/filesystems查看加载到内容的文件系统
Linux VFS(Virtual Filesystem Switch)的内核读取文件系统。
xfs文件系统配置:
数据区:包括了inode,数据区块,超级区块等,分成了多个存储区群组(allocation group),和ext系统的block group类似。
文件系统活动登录区:记录文件系统的变化。
实时运行区:文件系统建立过程中,暂时将文件放到这里,分配完毕后,写入数据区。
观察xfs超级区块的内容:
df列出文件系统的整体磁盘使用量:
-h大小合理化显示,-i以inode数量显示 -T文件系统名称也列出,-a列出所有文件系统。
-a列出的文件系统如/proc等,是系统数据,挂载到内存中不占用磁盘空间。
/dev/shm目录下的磁盘空间为物理内存的一半,利用内存模拟出来的磁盘,用来加速访问。
du命令,从文件系统中查找文件数据,分析当前目录下文件与目录占用的磁盘空间(单位1k)
相对慢。-s列出总量 -S不包括子目录下的总计(默认包括,则总量多加一次),-a列出所有(默认只列出文件夹下的文件占用) -m以M为单位显示
硬链接在某个目录下新增一条文件名,该文件名链接到某inode号码
例如:ln /etc/crontab . 在同一个文件系统里,将硬链接加入,可以通过查看inode发现相同。大小和源文件相同。
删除硬链接,文件本身不删除。没有分配inode,只是写入了关联数据。
硬链接不能再不同的文件系统里链接,也不能链接目录。
符号链接,源文件删除,符号链接无法打开。
例如:ln -s /etc/crontab /crontab2链接到文件,链接大小为文件名。分配新的inode。和windows的快捷方式类似。
建立新的目录时,新目录的链接数量为2 . /. 上层的链接目录+1 /..
lsblk列出系统上的磁盘列表
设备文件名,MAJ主要设备代码,MIN次要设备代码,RM是否可卸载,SIZE大小,RO是否只读 TYPE类型 等
-i 使用ascii输出字符,-p列出设备完整名称等。-f列出文件系统名称(UUID /LABEL)
blkid列出设备的UUID(全局唯一标识符 universally unique identifier)
parted列出磁盘分区表类型和分区信息。
例如:parted /dev/sda print
MBR分区使用fdisk软件分区
GPT分区使用gdisk软件分区
n创建新分区等,用?查看软件命令提示。Code表示文件可能的类型。
通过n创建分区,根据提示下一步,l查看Linux文件系统的格式。
写入w,由于磁盘分区正在使用中,无法加载新的分区表。所以查看分区表信息:
cat /proc/partitions可以发现分区表信息没有更新。
通过partprobe -s可以更新Linux内核的分区表信息。
通过d可以删除分区,之后写入执行,然后通过partprobe -s继续更新分区信息
处理正在使用的分区,应先卸载再删除。
fdisk与gdisk类似。在使用前应使用lsblk和blkid等找到磁盘,使用parted xxx print找到文件系统类型对应操作。
分区完毕需要格式化:
磁盘格式化为xfs文件系统:
例如:mkfs.xfs /dev/sda4(-d设置参数 -f强制格式化)
agcount数量和cpu逻辑内核做搭配以增加速度。
mkfs.xfs -f -d agcount=2,su=256k,sw=7 -r extsize=1792k /dev/sda4
RAID将文件细分为小型区块stripe(4k到1M),这些小区块在磁盘阵列里,一个文件被写入多个磁盘,性能较好。会保留数个校验磁盘。
su大小设置和stripe匹配,磁盘阵列8块除掉校验盘剩余7块sw=7.extsize=swidth*7=1792k
mkfs.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792k /dev/sda4等等...通过数量单位的格式化。
mkfs.ext4可以将分区格式化为ext4的文件系统。
例如:mkfs.ext4 /dev/sda4 可以格式化为ext4格式
mkfs 【tab】可以查找其他文件系统格式
也可以可以使用mkfs -t 【文件系统】 【设备】格式化设备
xfs文件系统错乱检验:
例如:xfs_repair /dev/sda4。如果无法检验尝试卸载后再处理。
fsck.ext4进行ext4的文件系统修复
查找每个区块群组的区块数量 如:dumpe2fs -h /dev/sda4 | grap 'Block per group'
之后强制检查一次:fsck.ext4 -b 32768 /dev/sda4
检查过程应在卸载状态
mount 文件系统的挂载:
通过blkid查看到uuid后,可以将文件系统通过:
mount UUID="xxxxxxxxxxxxx" /data/xfs 等类似挂载。
-o 加入挂载时的参数如编码等,账号密码读写权限等
将根目录重新挂载并加入读写与auto
mount -o remount,rw, auto /
将某目录暂时挂载到/data/var
mount --bind /var /data/var
通过umount data/var#通过挂载点卸载
umount /dev/sda4 #通过设备名卸载
通过文件的MAJOR (主要设备代码)和MINOR(次要设备代码) 的数值来代表设备,通过mknod修改
例如:mknod /dev/sda4 b 252 10 设置b外接文件设备,p设置FIFO文件设备,c外接输入设备
通过xfs_admin修改xfs的文件系统UUID与Label name
如:umount /dev/sda4
uuidgen
xfs_admin -u /dev/sda4#列出UUID
xfs_admin -U xxxxxxxxxxx /dev/sda4#设置UUID
-l列出lable name -L设置Label name
tune2fs修改ext4的Label name 和UUID。具体man tune2fs
/etc/fstab#通过mount挂载后,写入该文件,为启动时的配置文件
显示为:设备名,挂载点,文件系统,文件系统参数,是否能被dump备份,是否以fsck检验扇区
实际文件系统被挂载到/etc/mtab和/proc/mounts
remount的rw可以进入单人模式的只读状态修改更新 fstab文件
挂载镜像文件:
使用 mount -o loop /tmp/xxxx.iso /data/centos_dvd将iso文件进行挂载
通过dd建立大型文件
dd if=/dev/zero of=/srv/loopdev bs=1M count=512
输入为一直输入0的那个设备,输出为文件,每个块的大小为1M。总大小512M
之后通过mkfs.xfs -f /srv/loopdev格式化
之后通过blkid查看uuid
之后通过mount -o loop UUID="xxxxxxxxx" /mnt进行挂载
之后通过df -h /mnt查看
创建新的分区后,通过mkswap创建内存交换分区
如:mkswap /dev/sda5
blkid /dev/sda5查看TYPE
通过free查看物理内存和swap
swapon /dev/sda5#启动
swapon -s 查看内存交换分区设备有哪些
使用文件创建内存交换分区:
dd if=/dev/zero of=/tmp/swap bs=1M count=128
mkswap /tmp/swap#启动
mkswap -s查看。
swapoff关闭swap file并设置自动启动
如:swapoff /tmp/swap /dev/sda5
在
nano /etc/fstab 设置后,
通过:swapoff /tmp/swap /dev/sda5
swapon -a
swapon -s
设置启用。
别人的Linux私房菜(8)Linux磁盘与文件系统管理的更多相关文章
- 《鸟哥的linux私房菜》 - linux命令温故而知新
在公司的某角落里,看到了<鸟哥的linux私房菜>,顿时想看看是什么鬼. 其他时候还要自己去买才有,现在正好,比图书馆方便.看完了,写点啥! 编辑器很重要,一个vim就主要是我的使用方向: ...
- linux 私房菜 CH8 linux 磁盘与文件系统管理
索引式文件系统 superblock 记录此系统的整体信息,包括 inode/block 的总量.使用量.剩余量,以及文件系统的格式与相关信息等: inode 记录档案的属性,一个档案占用一个 ino ...
- 学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
四.压缩 gzip, gunzip Linux标准压缩工具 对文本文件可以达到75%的压缩率 compress, uncompress 旧的Unix压缩工具 bzip2, bunzip2 更新的Lin ...
- 学习鸟哥的Linux私房菜笔记(4)——文件
一.检查文件 用ls -l以长模式查看文件的详细信息,包含当前目录的硬盘使用空间.文件类型.文件权限.硬连接数.文件拥有者.文件所属组.文件大小.更改时间.文件名称. 用file检查文件类型 由于li ...
- linux 私房菜 CH7 Linux 档案与目录管理
路径 ``` . 此层目录 .. 上一级目录 前一个工作目录 ~ 当前用户的家的目录 ``` 变换目录 cd 显示目录 pwd [-P] -P 显示出确实的路径,而非使用链接 (link) 路径. 创 ...
- linux 私房菜 CH6 Linux 的档案权限与目录配置
查看文件属性 ls -al 第一栏:类型与权限 d:目录: -:档案: l:链接档: b:可随机存取装置: c:一次性存取装置: 第二栏:有多少档名连结到此节点 第三栏:拥有者 第四栏:所属群组 第五 ...
- 学习鸟哥的Linux私房菜笔记(7)——文件查找与文件管理1
一.可执行文件的搜索 which 显示一个可执行文件的完整路径 按照alias->$PATH的顺序查找 查看系统的环境变量 whereis 搜索一个可执行工具及其相关配置.帮助 slocate ...
- 鸟哥linux私房菜第6章笔记
鸟哥linux私房菜第6章笔记 文件权限 修改 chgrp [-R] groupname filename //修改文件所属组 chown [-R] ownername[:groupname] fil ...
- 每周一书-《鸟哥的Linux私房菜》获奖公布
<鸟哥的Linux私房菜>一书的赠书活动时间为2016年10月19日到10月31日, 也就是今天结束. 首先要感谢QQ号为:1084830483(路在远方),来自哈尔滨工程大学的同学赠送给 ...
- 《Linux私房菜》笔记和问题记录
鸟哥的Linux私房菜简体首页 对Linux的学习侧重于基本命令和运维相关的部分,最后章节的测试问题不错. 1.VIM程序编辑器 1.所有的Linux都会内建VI:很多软件的编辑接口都会主动呼叫VI: ...
随机推荐
- linux怎么样显示命令历史后又显示命令的输入时间
linux的bash内部命令history就可以显示命令行的命令历史,默认环境执行 history命令后,通常只会显示已执行命令的序号和命令本身.如果想要查看命令历史的时间戳,那么可以执行: 临时显示 ...
- html/css/js-横向滚动条的实现
在前端UI设计时,网页的制作很麻烦,深有感悟!碰到太多的不懂,或是第一次见,就要去网上找资料!横向滚动条就是我遇到麻烦中其中的一个,其实也 很简单,只是在几次项目中都用到了这个横向滚动条所以就拿出来说 ...
- Python-实列
"""题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再 ...
- 未预期的符号 `$'{\r'' 附近有语法错误
../runcmake: 行 2: $'\r': 未找到命令 ../runcmake: 行 3: 未预期的符号 `$'{\r'' 附近有语法错误 考虑到代码是从windows下一直过来的,脚本可能在格 ...
- redis 10个问题
(1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 Redis本质上是一个Key-Value类型的 ...
- 多线程之sleep和wait的区别
它们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁. 还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用inter ...
- http 文件上传协议图览
- CSS: pseudo-classes and pseudo-elements
1.Definition: pseudo-classes The pseudo-class concept is introduced to permit selection based on inf ...
- YAML基本语法
正如YAML所表示的YAML Ain’t Markup Language,YAML /ˈjæməl/ 是一种简洁的非标记语言.YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易 ...
- lastIndexOf() 找出指定元素出现的所有位置(返回的是下标数组)---lastIndexOf() 这个方法是倒叙查找,正序的是indexOf()
var indices = []; var array = ['a', 'b', 'a', 'c', 'a', 'd']; var element = 'a'; var idx = array.las ...