liunx磁盘存储和文件系统(代码片段)

author author     2022-12-03     376

关键词:

Liunx--总结

磁盘存储和文件系统

磁盘存储

机械硬盘:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成
固态硬盘:用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成

一、硬盘存储术语
head:磁头
track:磁道
cylinder:柱面--同一磁道称为柱
sector:扇区,512bytes

fdisk -l /dev/sd#--观察硬盘指标

CHS用24bit位寻址
其中前10位表示cylinder柱面,中间8位表示head,后面6位表示sector 扇区
早期用chs方式寻址最大寻址空间8GB 512 2^62^8*2^10

LBA(logical block addressing)
?LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
?ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes

二、磁盘两种分区方式:MBR,GPT

MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区结构
硬盘主引导记录MBR由4个部分组成(0磁道0扇区512byte)
1.主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序
出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节
2.分区表(DPT,Disk|Partition|Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
3.结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

GPT分区:GPT:GUID(Globals Unique Identifiers) partition|table(分区表)支持128个分区,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)

使用128位UUID(Universally Unique Identifier) 表示磁盘和分区,GPT分区表自动备份在头和尾两份,并有CRC校验位

hexdump -C -n 512 /dev/sd#--查看硬盘前512字节
dd if=/dev/sda of=/data/mbr bs=1 count=64--dd备份分区表(分区表放在它处)

。。。分区工具
parted命令的操作都是实时生效的,小心使用
用法:parted [选项]... [设备 [命令 [参数]...]...]
parted /dev/sdb mklabel gpt|msdos--打标记然后进行分区gpt|msdos
parted -l 查看partition Table:gpt列出分区信息
parted /dev/sdb print打印分区信息
parted /dev/sdb mkpart primary 1 200 (默认M)--分区连续分区不要跳着分
parted /dev/sdb rm 1 删除分区

fdisk mbr和gdisk gpt--命令格式基本相同不做赘述
fdisk /dev/sd# 交互式管理分区
p 分区列表
t 更改分区类型改id
n 创建新分区-p主(1-4)e扩展 默认1开始自设+2M\G\K
--分区需要注意连续分区,不要跳着分
d 删除分区 对应分区数字 分区数字易改变
v 校验分区
u 转换单位
w 保存并退出 出去立马执行才会更改
q 不保存并退出

。。分过区可能会出现内存中未加载新分区的信息
lsblk
ll /dev/sdb*
cat /proc/partitions--到这都是看内存中的硬盘信息
fdisk -l /dev/sd#--看到某硬盘的所有分区状态
partprobe同步硬盘信息 entOS 5,7
。。。。
centos6 partx -a /dev/DEVICE 创建时同步
partx -d --nr 6-7 /dev/DEVICE 删除时同步


文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统

查看系统支持的文件系统:/lib/modules/uname –r/kernel/fs
各种文件系统:
https://en.wikipedia.org/wiki/Comparison_of_file_systems

ext4:是ext文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
xfs:SGI,支持最大8EB的文件系统
btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:FAT32, exFAT,NTFS
Unix: FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统: fastdfs,ceph, moosefs,mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统

lsblk -f 查看文件系统
一、创建文件系统命令 (下面命令两两一组,每组的选项基本通用)
mkfs命令
(1) mkfs.FS_TYPE /dev/DEVICE
ext4-xfs-btrfs-vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L ‘LABEL‘ 设定卷标
-f 强制对已经存在xfs重装
mkfs -b 设置快大小以快为单位
mke2fs:ext系列文件系统专用管理工具
-t ext2|ext3|ext4 指定文件系统类型
-b 1024|2048|4096 指定块大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i#为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性

tune2fs 设定ext系列文本系统可调整参数的值
-l 查看指定文件系统超级块信息;super block
-L ‘LABEL’ 修改卷标
-m # 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, –O ^has_journal
-o 调整文件系统的默认挂载选项,–o ^acl
-U UUID 修改UUID号
dumpe2fs:将磁盘块分组管理
-h:查看超级块信息,不显示分组信息

文件系统检测和修复:常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复
fsck: File System Check--fsck /dev/sdb3 -y(自动回答)修复数据任然丢失
fsck.FS_TYPE
fsck -t FS_TYPE
-p 自动修复错误
-r 交互式修复错误
FS_TYPE 一定要与分区上已经文件类型相同
e2fsck:ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
。。。
centos6 etx4 后续添加硬盘分区没有acl权限
fdisk n e +100M
mkfs.etx4 /dev/sda6
tune2fs -l /de/sda6
挂载 进入磁盘设置acl权限
tune2fs -o acl /dev/sdb6 添加acl权限
tune2fs -o ^acl /dev/sdb6 去

文件系统标签:指向设备的另一种方法-与设备无关
blkid [OPTION] [DEVICE]--块设备属性信息查看 -U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL e2label DEVICE [LABEL]
findfs :查找分区
findfs [options] LABEL=<label> findfs [options] UUID=<uuid>

二、mount挂载

将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
mount通过查看/etc/mtab文件显示当前已挂载的所有设备

mount[-fnrsvw][-t vfstype][-o options]device dir
device:指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L ‘LABEL‘, 例如 -L ‘MYDATA‘
(3) UUID, -U ‘UUID‘:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
事先存在,建议使用空目录
进程正在使用中的设备无法被卸载
mount常用命令选项 --通过mount命令查看挂载设备
-t vsftype 指定要挂载的设备上的文件系统类型
-r readonly,只读挂载
-w read and write, 读写挂载
-n 不更新/etc/mtab,6mount不可见 cat /etc/mtab
cat /proc/mounts查看内核追踪到的已挂载的所有设备
centos6 /etc/mtab /proc/mounts
-a自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL‘ 以卷标指定挂载设备
-U ‘UUID‘ 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上(挂载目录)
-当两个文件inode一样时可能是目录挂载
-mount -B /boot/grub2 /mnt/grub2

卸载命令
findmnt MOUNT_POINT|device--查看文件是否以挂载 $?的值判断
查看正在访问指定文件系统的进程
lsof MOUNT_POINT--查看谁在访问
fuser -v MOUNT_POINT--查看谁在访问
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
卸载 umount DEVICE umount MOUNT_POINT

mount /dev/sda /mnt /sda--uuid或卷标都可挂 uuid挂载好有唯一性

文件系统空间占用等信息的查看工具
df [OPTION]... [FILE]...
-H 以10为单位 -T 文件系统类型 -h human-readable -i inodes instead of blocks
-P 以Posix兼容的格式输出
查看某目录总体空间占用状态
du [OPTION]... DIR -h human-readable -s summary 总和
--max-depth=# 指定最大目录层级
。。。
空洞文件或稀疏
dd if=/dev/zero of=/data/bigfile bs=1M count=1023 seek=2048
ls -h bigfile 3G --看到的逻辑大小
du -sh bigfile 1G --只占用1G df/data看到的都是实际大小
loop设备关联文件
ll /dev/loop c6查看loop设备默认0-78个
dd if=/dev/zero of=/data/bigfile bs=1M count=1023 seek=2048
mkfs.ext4 /data/bigfile
losetup /dev/loop6 /data/bigfile--设备关联
losetup -a
losetup -d
。。。。
mknod创建特殊文件基本什么都可以创建
mknod /dev/loop100 b 7 8 --创建loop设备
rm -rf loop100
/boot/grub/grub.conf 下面可以 max_loop=100 重启
ll /devloop

mount -o ptions:多个选项使用逗号分隔
async.异步模式sync.同步模式,内存更改时,同时写磁盘
atime/noatime包含目录和文件(存放时间超过一天才会更新或mtime>atime时间
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持自动挂载,是否支持- a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro 只读 rw 读写
user/nouser 是否允许普通用户挂载此设备,/etc/ fstab使用
acl 启用此文件系统上的acl功能
loop 使用loop设备

文件挂载配置文件
/etc/fstab每行定义一个要挂载的文件系统
1、要挂载的设备或伪文件系统
设备文件 LABEL:LABEL="" UUID:UUID=""
伪文件系统名称:proc, sysfs
2、挂载点
3、文件系统类型:ext4,xfs,iso9660,nfs,none
4、挂载选项:defaults ,acl,bind -o 的选项
5、转储频率:0:不做备份 1:每天转储 2:每隔一天转储
6、fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检
1:首先自检;一般只有rootfs才用
2:非rootfs使用
。。。
/dev/sdr6 /mnt/sda6 ext4 defaults 0 3
空洞文件用uuid在fstab写入挂载
/boot /mnt/boot none bind 0 0 文件挂文件配置

mount-a自动挂载所有支持自动挂载的设备且挂载选项中有auto功能

三、swap
交换分区是系统RAM的补充,Swap分区支持虚拟内存。当没有足够的RAM保存系统处理的数据时会将数据写入 swap 分区
当系统缺乏swap空间时,内核会因RAM内存耗尽而终止进程。配置过多swap空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露

挂载交换分区--基本设置包括:?创建交换分区或者文件
?使用mkswap写入特殊签名?在/etc/fstab文件中添加适当的条目?使用swapon -a 激活交换空间
?启用:swapon
swapon [OPTION]... [DEVICE]
-a:激活所有的交换分区
-p PRIORITY:指定优先级
/etc/fstab 在第4列中:pri=value
禁用:swapoff [OPTION]... [DEVICE]
SWAP的优先级
可以指定swap分区0到32767的优先级,值越大优先级越高
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
优化性能:分布存放,高性能磁盘存放
。。。
分swap分区 free -h 看内存使用情况
fdisk /dev/sdc p m t L 19 改分区盘id w (gpt)
mkswap 创建swap文件系统=mkswap/dev/sdc1
写到fstab文件 free -h 没看到
swapon -a 开启swap free -h
cat /proc/swaps 查看swap分区具体有多少=swapon -s
swapoff /dev/sdc1禁用


补充

dd 命令:convert and copy a file
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
if=file 从所命名文件读取而不是从标准输入
of=file 写到所命名的文件而不是到标准输出
ibs=size 一次读size个byte
obs=size 一次写size个byte
bs=size block size, 指定块大小(既是是ibs也是obs)
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 复制n个bs
conv=conversion[,conversion...]用指定的参数转换文件 转换参数:
dd if=/data/file of=fstab conv=ucase
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
fdatasync写完成前,物理写入输出文件,判断读写速度

备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB,想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

1、备份:
dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
恢复:
dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘

2、拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件

3、从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件

4、销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行

5、得到最恰当的block size
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小

6、测试硬盘写速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000 conv=fdatasync
测试硬盘读速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null conv=fdatasync

linux篇|磁盘存储和文件系统(代码片段)

磁盘存储和文件系统分区文件系统挂载设备管理虚拟内存RAID管理LVM管理我们从一个新硬盘安装到Linux系统,期间的配置,一直到正常使用的角度,来学习磁盘存储和文件系统,过程如下:选择分区类型(MBR或GPT)-->创建分区-->... 查看详情

磁盘存储和文件系统:(代码片段)

...,write(),close()设备类型:块设备:block,存取单位“块”,磁盘分区块字符设备:char,存取单位“字符”,键盘设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信设备号码:主设备号:majornumber,标识设... 查看详情

11磁盘存储和系统分区管理文件管理系统(代码片段)

文件系统操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等支持的文件系统:ls/lib/modul... 查看详情

xv6文件系统(代码片段)

...录和路经名(请参阅第零章),并且把数据存储到一块IDE磁盘上(请参阅第三章)。这个文件系统解决了几大难题:该文件系统需要磁盘上数据结构来表示目录树和文件,记录每个文件用于存储数据的块,以及磁盘上哪些区域是... 查看详情

liunx开机启动流程(代码片段)

...; BIOS(BasicInput/OutputSystem),基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器... 查看详情

nfs文件系统及搭建nfs共享服务(代码片段)

...的数据和元数据进行组织的一种机制。文件系统是在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区上组织文件方式方法,常见文件系统如ext2、ext3、ext4、NTFS或fat、fat32等。文件系统格式组织存储文件或数据的方法,... 查看详情

磁盘和文件系统(代码片段)

一、磁盘简介计算机的外部存储器中也采用了类似磁带的装置,比较常用的一种叫磁盘,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。1、硬盘的chs模式是指chs(Cylinder/Head/Se... 查看详情

云存储(代码片段)

...”可管理型云存储“非可管理性呈现一个可以立即使用的磁盘驱动器,面向普通用户;限定了存储容量和使用方式使用成本低,操作简单可管理型则需要对原生虚拟化磁盘进行配置,面向开发人员,将存储空间呈现为原生磁盘,... 查看详情

磁盘存储文件系统的知识概括(代码片段)

磁盘存储与文件系统分区两种分区格式:MBR、GPTMBR分区MBR分区磁盘的分区表信息存放在硬盘0磁道第0个扇区内总共512字节前446字节为bootloader中间64位为磁盘分区表信息,每个分区信息占16个字节,总计存放4个分区。(这段就是需要... 查看详情

十存储结构与磁盘划分(代码片段)

...统中,想要找到一个文件,我们要依次进入该文件所在的磁盘分区(假设这里是D盘),然后在进入该分区下的具体目录,最终找到这个文件。但是在Linux系统中并不存在C/D/E/F等盘符,Linux系统中的一切文件都是从“根(/)&rdq... 查看详情

liunx磁盘存储

...文件。设备也分为:  块设备:block单位为“块”磁盘  字符设备:char单位为“字符”键盘设备号码:用来标识设备。每一个设备都有不同的设备号  主设备号:majornumbar,标识设备类型&e 查看详情

磁盘存储和文件系统(代码片段)

分区两种分区格式:MBR、GPTMBR分区MBR分区磁盘的分区表信息存放在硬盘0磁道第0个扇区内总共512字节前446字节为bootloader中间64位为磁盘分区表信息,每个分区信息占16个字节,总计存放4个分区。(这段就是需要备份出来的数据)最... 查看详情

共享以及文件系统的介绍(代码片段)

文件系统1即在外部存储设备上组织文件的方法、数据在磁盘的排列方式2常见的文件系统FATNTFS【现在主用】EXT【以后用在Linux】NTFS优点1提高磁盘的读写性能2可靠性:加密,访问控制列表3磁盘利用率:压缩,磁盘配额4AD需要NTFS... 查看详情

8磁盘知识和历史(代码片段)

磁盘管理相关知识虽然磁盘只能归类到I/O设备,但是他也是非常重要的一个知识来的。机械式设备外部存储设备:比如:U盘,光盘,软盘,硬盘,磁带硬盘知识:磁盘的结构:扇区与磁道多个盘面,双面可存储,磁头悬浮在盘... 查看详情

不知道linux文件系统是怎么工作的?详解来了(代码片段)

和CPU、内存一样,磁盘和文件系统的管理,也是操作系统最核心的功能。磁盘为系统提供了最基本的持久化存储。文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。那么,磁盘和文件系统是怎么... 查看详情

hdfs知识总结(代码片段)

...据块的好处是:一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块不需要存储在同一个磁盘上,因此它们可以利用集群上的任意一个磁盘进行存储。简化了存储子系统的设计,将存储子系统控制单元设置为块,... 查看详情

文件系统(代码片段)

...的。设备也是被视作文件的,那么作为与文件“平级”的磁盘设备文件与作为文件系统底层的磁盘设备的区别在于:一种是把它看作成线性空间的数据,另一种是把他看成有结构、有组织的数据。文件分类磁盘文件:由两部分组... 查看详情

磁盘inodes不足freeinodesislessthan20%onvolume(代码片段)

...下面的文件比较多,然后删除一些没有作用的文件。查看磁盘总的inodes数。使用命令:df-i四、扩展什么是inodes是一个数据结构在unix系统里面,类似一个文件系统对象,像一个文件或者是一个目录。每个存储设备(例如硬盘)或... 查看详情