Linux运维第二阶段(六)文件系统管理
Linux运维 第二阶段 (六)文件系统管理
1、磁盘管理:
机械式硬盘:
(1)sector扇区:在track磁道上划分的,1扇区512bytes
(2)cylinder柱面:由不同盘面上相同编号的磁道组成
(3)partition分区:在柱面上进行的,划分逻辑边界,磁道越靠外,访问速度越快,在win下C盘放在靠外的磁道
(4)MBR(master boot record):主引导记录,至关重要,位于硬盘的第一个扇区,共512bytes,其中446bytes(boot loader引导加载器)、64bytes(每16bytes标示一分区,共4个分区)、2bytes(magic number魔数,标记MBR是否有效))
注:#dd if=/dev/zero of=/dev/sd[a-z] bs=512 count=1(清空指定磁盘,危险操作)
#sync;sync
(5)磁盘读写延迟:读写要靠移动磁头,衡量指标(寻道时间)
(6)转速越快,发热量越大:5400r/min,7500r/min,10kr/min,15kr/min
2、文件系统:
根文件系统(rootfs)FHS(filesystem hierarchy standard)文件系统层级标准:
/boot(系统启动相关文件如内核、vmlinuz、initramfs、initrd、grub)
/dev(设备文件(设备的入口),b块设备(随机访问、数据块)、c字符设备(线性访问,有次序,按字符为单位)、设备号(主设备号major、次设备号minor),有设备文件的设备才能被linux访问)
/etc(配置文件)
/home(用户的家目录,默认为/home/USERNAME/)
/root(管理员家目录)
/lib(库文件,内核封装好的功能,/lib/modules(内核模块文件),表态库(*.a),动态库(.so(sharedobject),windows下的为dll(dynamic link library)))
/media(移动设备的挂载目录)
/mnt(额外的临时文件系统,挂载目录)
/misc(杂项)
/opt(optional可选目录,早期是安装第三方程序的目录)
/proc(伪文件系统,内核的映射文件,系统调优的目录,可调参数及统计数据位置处)
/sys(伪文件系统,跟硬件设备相关的属性设备文件)
/tmp(临时文件目录,/var/tmp,1个月未被使用的文件,系统脚本会将其删除)
/var(varibale可变化文件目录,系统运行时间越长,此目录越大)
/bin(binary,可执行文件目录,用户命令,与系统启动相关)
/sbin(管理命令,与系统启动相关)
/usr(universal sharedread-only,/usr/bin,/usr/sbin,/usr/lib与提供的功能相关)
/usr/local(第三方软件位置,系统非关键性程序,但与业务相关的关键程序,/usr/local/bin,/usr/local/sbin,/usr/local/lib)
根分区/与根下的目录:物理上可以在不同的分区,但逻辑上有上下级关系;任何一个作为访问入口的路径一定独立于这个入口所指向的分区之外的
注:/bin,/sbin/,/lib,/etc这些目录不能挂载到额外的分区,系统启动用到的程序,不能挂载到额外的分区,必须在根文件系统上;
/usr/bin,/usr/sbin,/usr/lib操作系统的核心功能,建议单独分区;
/usr/local/{bin,sbin,lib,etc,man}第三方软件,建议单独分区;
/proc,/sys不能单独分区,默认为空
/dev不能单独分区,2.6kernel使用udev方式动态地创建设备文件,2.4kernel不能根据文件识别设备
/home建议单独分区
/root没有也可,不要单独分区
(1)metadata元数据, inode bitmap;block,block bitmap块位图;
oracle中也有bitmap索引;
(2)inode(index node)记录:inode号、权限、属主、属组、时间戳、大小,但不放文件名;
文件名在目录上放着,目录也是文件,目录中存放着一张表(inode号与文件名称的对应关系,每一行记录一个文件);
创建文件:inode、有可能要block、软链接和设备文件不要磁盘块
(3)文件系统是内核的功能;管理文件通过系统调用;
CPU自内而外四个级别:第0、1、2、3环,ring0(内核级别),ring1和ring2未使用,ring3(用户级别);
superblock:boot block,blockgroup0,blockgroup1...blockgroupn;其中block group0(super block,GDT(group description table),blockbitmap,innode bitmap,inode table,data blocks)
superblock定义了:有多少块组;每组有多少块;块大小(1024bytes,2048bytes,4096bytes,默认4K);空闲磁盘块;已用磁盘块;空闲块组;已用块组;
superblock若挂掉,整个分区也完了,superblock可以有多个备份;
GDT块组描述符也不能挂掉,也要有备份
(4)locate与find查找文件的区别:locate是查找生成的DB文件,而find要遍历磁盘上的每一个文件
(5)FAT32支持的最大单个文件为4G
(6)删除文件仅在blockbitmap上标记为未使用,block里的数据是不动的,再存新文件时才会覆盖block,这样误删的数据通过数据恢复工具可找回
(7)360文件粉碎,不仅将blockbitmap标记为未使用,而且用随机数填充到相应的block中,所以文件找回很困难
(8)同一分区下的剪切要快的多,因为block不动,只把原来的目录条目删掉再新建一条目录条目;不同分区下的剪切则不然,因为要先复制再删除
(9)一个磁盘块block按内容只能属一个文件,一个磁盘块block可以有多个路径(硬链接);
硬链接:只能对文件创建,不能应用于目录;不能跨文件系统;创建硬链接会增加文件被链接的次数
符号链接:可应用于目录;可跨文件系统;不会增加被链接文件的链接次数;其大小为指定的路径所包含的字符个数
#ln [-sv] SRC DEST
注:#ll查看某一目录下的文件,第二列为硬链接文件的次数,只有在该数字小于1时,这个文件才不会被访问到
(10)硬盘设备的设备文件名:
IDE、ATA口的以hd开头:
第一个IDE口主盘/dev/hda,从盘/dev/hdb;第二个IDE口主盘/dev/hdc,从盘/dev/hdd;
第一个主分区hda1,第一个逻辑分区从hda5开始(因为MBR类型主分区最多只能有四个,hda4为扩展分区)
SATA、SCSI、USB以sd开头:
按内核找到的顺序依次为sda、sdb、sdc...;
第一个主分区sda1,第一个逻辑分区从sda5开始
(11)文件系统类型:NFS、ocfs2、gfs2、swap、FAT32(fileallocation table)、NTFS、ISO9660、CIFS、EXT2、EXT3、EXT4、XFS、reiserfs、jfs(IBM)
#cat /proc/filesystems(查看当前内核所支持的FS类型)
EXT3:数据区、元数据区、日志区(journalfilesystem,可缩短开机filesytem修复的速度)
(12)#fdisk /dev/sd[a-z](管理指定硬盘)
p显示当前硬盘分区,包括没保存的改动
n创建新分区
d删除一个分区
w保存退出
q不保存退出
t修改分区类型
l显示所支持的所有类型
#partprobe [/dev/sd[a-z]](inform the OS ofpartition table changes,不用重启,告知OS分区改动情况,redhat6也可用命令partx)
#cat /proc/partitions(查看内核识别到的分区)
#fdisk -l (查看内核识别到硬盘的所有分区)
#fdisk -l /dev/sda(查看指定硬盘的所有分区)
(13)格式化:
低级格式化:创建磁道;
高级格式化:创建文件系统(用户空间的命令+内核的功能)
文件系统建立好后会预留出元数据区域空间
#mkfs -t FSTYPE PARTITION(build alinux file system,默认5%空间预留给管理员用,reversed for the super user)
#mkfs -t ext4 /dev/sdb1
#ls /sbin/mkfs*
#mkfs.ext4 /dev/sdb1(与上个命令一致)
#mke2fs(专门管理ext系列文件系统)
-j(Create thefilesystem with an ext3 journal)
-b BLOC_SIZE(Specify the size of blocks in bytes,指定块大小,1024,2048,4096,默认4096)-L LABEL(Set the volume label设定卷标,#mke2fs -L MYDATA -j /dev/sdb1)
-m #(Specify thepercentage of the filesystem blocks reserved for the super-user指定预留给管理员的块数百分比,默认5(5%),#mke2fs -m 3 /dev/sdb1)
-i #(Specify the size of each inode in bytes指定为多少字节的空间创建一个inode,默认8192,这里给出的数值要为2^n倍)
-N #(specify thenumber of desired inodes directly指定要创建的inode个数)
-F(强制创建文件系统,即使在被使用或被挂载,atruly dangerous thing to do危险操作)
-E EXTEND_OPTIONS(用于指定额外的文件系统属性)
(14)查询、调整文件系统相关属性
#blkid(locate/print blockdevice attributes查看磁盘设备的相关属性,LABEL,TYPE,UUID(uniform universal ID)
#blkid /dev/sdb1
#e2label DEVICE NEW_LABEL(Change thelabel)
#e2label /dev/sdb1 SHARED
#tune2fs(adjust tunablefilesystem parameters,调整文件系统相关属性)
-j(无损创建不损坏原有数据将ext2升为ext3,#tune2fs -j /dev/sdb2)
-L LABEL(设定或修改卷标)
-m #(调整预留百分比)
-r #(指定预留块数)
-o MOUNT_OPTIONS(设定默认挂载选项)
-c #(指挂载次数达到#之后进行自检,0或-1关闭此功能)
-i #(每挂载使用#天后进行自检,0或-1关闭此功能)
-l(列出超级块信息)
#dumpe2fs DEVICE(dump(倾倒;倾卸) ext2/ext3/ext4 filesystem information)
#dumpe2fs /dev/sda1
#dumpe2fs -h /dev/sda1(only displaythe superblock information)
#fsck -a -t FSTYPE DEVICE|PARTITION(check and repair a Linux file system,-a自动回答yes,-t指定文件系统类型)
#fsck -a -t ext4 /dev/sdb1
#e2fsck -p -f DEVICE(check a Linuxext2/ext3/ext4 file system专用修复ext类的FS,-p自动回答yes,-f强制修复)
3、挂载:将新文件系统关联到当前的根文件系统
卸载:将某文件系统与当前根文件系统的关联关系移除
#mount(显示当前已挂载的全部设备)
#mount 设备DEVICE 挂载点DIR(挂载,挂载完成后,通过挂载点访问对应FS上的文件)
#umount DEVICE|DIR(卸载,只需指一个即可,注意:没有被进程使用才能被卸载)
设备:设备文件,如/dev/sda5;卷标,LABEL=“*”;UUID,UUID=“*”
挂载点:目录,要求:此目录没有被其它进程使用;目录得事先存在;目录中原有的文件被暂时隐藏,卸载后才能看到
#mount options [-o options] DEVICE MOUNT_POINT(-o async|atime|noatime|auto|defaults|dev|exec|_netdev|owner|remount|ro|rw|suid...指定额外的挂载选项或文件系统常用的属性)
#mount -a(挂载/etc/fstab文件中定义的所有文件系统)
#mount -n /dev/sda5 /mnt/test(默认情况下mount每挂载一个设备都会把挂载的设备信息保存在/etc/mtab文件中,使用-n意味着挂载设备时不把信息写入此文件)
#mount -t ext4 /dev/sda5 /mnt/test(指定正在挂载设备的FStype,不使用-t,mount会调用blkid命令获取对应的文件系统类型)
#mount -r /dev/cdrom /mnt(只读挂载,挂载光盘时常用此选项)
#mount -w /dev/cdrom /mnt(读写挂载,光驱和光盘都支持rw)
#mount -o remount,ro /dev/sda5(多个选项用逗号隔开,重新挂载可以不指mount_point)
注:用命令mount挂载的设备重启后失效,操作系统初始化时会分析此文件/etc/fstab并自动挂载。
#cat /etc/fstab
此文件各字段分别为:要挂载的设备;挂载点;FS类型;挂载选项,默认为defaults;转储频率(与备份相关,0不备份1每天备份2每隔一天备份);自检次序(文件系统检测次序,一般只有根为1,其它都为2,0表示不检查)
#fuser -v /mnt/cdrom(identifyprocesses using files or sockets,查看某文件或目录上正在运行的进程)
#fuser -km /mnt/cdrom(终止正在访问此挂载点的所有进程,应用于正常无法卸载某设备,注意确认自己不在此挂载目录下,否则会将自己踢出)
4、swap交换分区,虚拟内存
交换空间:允许内存过载使用overcommit;允许应急使用(内存不足)
内存:虚拟地址(线性地址,32bitOS模拟4G内存空间,页面)―>物理内存(面框)
在内存角度pageout、pagein,在swap角度swapout、swapin;以上情况任意一种若数据增大,一般情况得增加内存
寄存器访问时间1ns,缓存10ns,内存10ms,磁盘秒级别
#free(显示物理内存和交换空间的使用情况,buffers缓冲,cache缓存)
#free -m(以MB为单位显示,megabytes)
增加新的交换分区:
#fdisk /dev/sdc
更改文件系统类型为82
#mkswap /dev/sdc1
#swapon /dev/sdc1
#swapon -a(应用所有定义在/etc/fstab文件中的交换设备)
#free -m
#swapoff /dev/sdc1(关闭交换分区)
#free -m
5、#dd if=INPUTFILE(数据来源) of=OUTFILE(数据存储目标) bs=1024(默认字节) count=COUNT(convert and copy afile,可用于硬盘性能测试,dd复制的是底层的数据流,磁盘中的01代码;而cp复制是以文件为单位,磁盘-->VFS-->内存-->VFS-->磁盘)
#dd if=/dev/zero of=/tmp/tmpfile seek=255 bs=1M count=1(seek表示跳过多少空间,再创建文件,这个文件给我们假象是256M,但实际只有1M)
#ls -lh /tmp/tmpfile(此种方式查看文件为256M)
#du -sh /tmp/tmpfile(此种方式查看文件为1M)
应用1:
#dd if=/dev/sda of=/root/mbr.backup bs=512 count=1(备份MBR)
#dd if=/root/mbr.backup of=/dev/sda bs=512 count=1(还原MBR)
应用2:
#dd if=/dev/zero of=/var/swapfile bs=1M count=1024(创建虚拟的镜像文件,此例应用于swap空间不足,但本地又无多余分区,应急用镜像文件模拟磁盘,/dev/zero泡泡设备吐零)
#mkswap /var/swapfile
#swapon /var/swapfile
#free -m
注:lookback回环设备,使用软件来模拟实现硬件
#cat /dev/cdrom > /root/rhel6.iso(制作光盘镜像)
以上是学习《马哥网络视频》做的笔记。
一、硬盘:
逻辑结构:扇区sectors(磁盘的最小存贮单位)、磁道、柱面cylinders;
硬盘大小:磁头数*柱面数*扇区数*每个扇区的大小
注:柱面数表示硬盘每一盘片有几条磁道,扇区数表示每条磁道上有几个扇区
二、文件系统:
》超级块(superblock)记录整个文件系统的信息,包括block与inode的总量,已经使用的,未使用的,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间;
》数据块(datablock)用来实际保存数据的,block块大小(1K、2K、4K)和数量在格式化后就已经决定,不能改变,除非重新格式化;文件数据如果小于一个block,则剩余空间不能被其它文件占用,文保存件数据若大于一个block,则占用多个block。windows中的磁盘碎片整理工具就是把一个文件占用的多个block尽量整理到一起,这样可以加快读写速度。
三、常用的磁盘管理命令
》#df -ahT (统计分区占用情况,统计分区的剩余空间是准确的)
-a(显示特殊文件系统,几乎都保存在内存中/proc所以占用量都是0)
-h(human-readable,K、M、G)
-T(多出文件系统类型一列)
》#du -a|-h|-s 目录或文件名 (统计文件大小是准确的)
-a(显示每个文件的磁盘占用量,默认只统计子目录的磁盘占用量)
-s(summary统计总占用量,而不列出子目录和子文件的占用量)
》#lsof | grep deleted (查看被删除的文件,然后一个一个进程 手工kill)
》#fsck -y /dev/sdb1 (自动修复,开机自动执行,与每个分区下的lost+found有关)
》#dumpe2fs /dev/sda2 (显示磁盘状态,可查看磁盘UUID等)
》#stat 文件名 (查看文件的详细时间)
》#file 文件名 (判断文件类型)
》#type 命令名 (判断命令类型)
四、fdisk 手工分区:
#fdisk -l (查看系统所有硬盘分区)
#fdisk /dev/sdb (进行磁盘分区)
command(mfor help):m/n/p/d/q/w (常用交互指令,分好后记得w保存)
#partprobe (执行此命令可不重启,强制重读所有分区文件,重新挂载分区)
#mkfs -t ext4 /dev/sdb1 (格式化,建立文件系统)
#mke2fs -t|-b|-i|-j|-L /dev/sdb1 (格式化,可调整分区默认参数)
-b(指定block大小)
-i(指定字节/inode的比例,多少个字节分配1个inode)
-j(建立带有ext3日志功能的文件系统)
-L(给文件系统设置卷标名,有此项就不用e2label设定了)
#mount /dev/sdb1 /disk1 (挂载)
#fdisk -l
#df
#vi /etc/fstab (慎重修改此文件,如有错误系统无法启动)
/dev/sdb1 /disk1 ext4 defaults 1 2 (以下依次为1到6)
1、设备文件名:此项也可使用UUID(universallyunique Identifier)通用唯一识别码,好处:当硬盘增加了新的分区或分区的顺序改变,内核升级仍能保证分区正确的加载,而不造成启动障碍;
#ll -l /dev/disk/by-uuid/ 查看磁盘UUID
#dumpe2fs /dev/sdb1 查看磁盘UUID
2、挂载点
3、文件系统
4、挂载选项,例:defaults,acl或defaults,usrquota,grpquota
5、是否可备份,0不备份,1每天备份,2不定期备份
6、是否检测磁盘,0不检测,1启动时检测,2启动后检测
#mount -a (测试修改的/etc/fstab是否正确,重新挂载所有内容)
五、/etc/fstab文件修复:
输入root密码->#mount -o remount,rw / ->#vi /etc/fstab
六、parted命令分区:分区表两种:MBR和GPT
MBR(master bootrecord)主引导记录分区表,支持的最大分区2TB,最多支持4个主分区(3个主分区1个扩展分区)
GPT(GUIDpartition table)全局唯一标识分区表,支持的最大分区18EB(1EB=1024PB;1PB=1024TB),最多支持128个分区,其中1个系统保留分区,127个用户自定义分区
注:parted命令只能格式化为ext2,但可识别ext4,可在系统中格式化为ext4
#parted /dev/sdb
(parted)print/mklabel gpt/mkpart/mkfs/resize/rm (常用交互命令)
#parted -l (查看分区)
注:多分区时end为-1代表到磁盘的最后
七、分配swap分区
#fdisk /dev/sdc
command(m for help)t (修改分区系统的ID)
82 (82为swap分区,83为linux)
#mkswap /dev/sdc1 (格式化)
#swapon /dev/sdc1 (激活该分区的swap功能)
#swapoff /dev/sdc1 (关闭该分区的swap功能)
#free (查看内存状况)
开机自动挂载swap:
#vi /etc/fstab
/dev/sdc1 swap swap defaults 1 2
注:本文由互联网收集整理(51CTO、360DOC、chinaunix、百度百科、兄弟连免费视频等)。