ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux磁盘分区管理

2021-03-31 22:33:18  阅读:167  来源: 互联网

标签:文件 管理 分区 dev Block linux 磁盘分区 root 硬盘


文章目录

计算机硬盘简介

  • 硬盘是计算机主要存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成,碟片外覆盖有铁磁性材料,硬盘内部由磁道、柱面、扇区、磁头等部件组成

  • Linux系统中硬件设备相关配置文件存放在/dev/下,常见硬盘命名:/dev/hda、/dev/sda、/dev/sdb、/dev/sdc、/dev/vda。不同硬盘接口,在系统中识别的设备名称不一样。

  • IDE硬盘接口在Linux中设备名为/dev/hdaSAS、SCSI、SATA硬盘接口在Linux中设备名为sda高效云盘硬盘接口会识别为/dev/vda等。

  • 文件储存在硬盘上,硬盘的最小存储单位叫做Sector(扇区)每个Sector储存512字节。操作系统在读取硬盘的时候,不会逐个Sector的去读取,这样效率非常低,为了提升读取效率,操作系统会一次性连续读取多个Sector,即一次性读取多个Sector称为一个Block(块

  • 由多个Sector组成的Block是文件存取的最小单位。Block的大小常见的有1KB、2KB、4KB,Block在Linux中常设置为4KB,即连续八个Sector组成一个Block

  • /boot分区Block一般为1KB,而/data/分区或者/分区的Block为4K

  • linux 系统查看分区的Block大小方法:

    [root@hbs ~]# stat anaconda-ks.cfg |grep -i "block"
      Size: 1511      	Blocks: 8          IO Block: 4096   regular file
    [root@hbs ~]# 
    
    [root@hbs ~]# stat /boot/|grep "IO Block"
      Size: 4096      	Blocks: 8          IO Block: 4096   directory
    [root@hbs ~]# 
    
    
    
    

硬盘Block和indoe详解

  • 通常而言,操作系统对于文件数据的存放包括三个部分:

    • 文件内容
    • 权限
    • 文件属性
  • 操作系统文件存放是基于文件系统,文件系统会将文件的实际内容存储到Block中,而将权限与属性等信息存放至Inode中

  • 在硬盘分区中,还有一个超级区块 (SuperBlock) ,SuperBlock会记录整个文件系统的整体信息,包括 Inode、Block 总量、使用大小、剩余大小等信息,每个 inode 与 block 都有编号对应,方便Linux系统快速定位查找文件。

  • Superblock:记录文件系统的整体信息,包括inode与block的总量、使用大小、剩余大小, 以及文件系统的格式与相关信息等;

  • Inode:记录文件的属性,权限,同时会记录该文件的数据所在的block编号;

  • Block:存储文件的内容,如果文件超过默认Block大小,会自动占用多个Block。

  • 操作系统进行格式化分区时,操作系统自动将硬盘分成两个区域。一个是数据Block区,用于存放文件数据;另一个是Inode Table区,用于存放inode包含的元信息。

  • 每个inode节点的大小,可以在格式化时指定,默认为128Bytes或256Bytes,/boot分区Inode默认为128Bytes,其他分区默认为256Bytes,查看Linux系统Inode方法如下:

    [root@hbs ~]# stat /boot/|grep "Inode"
    Device: 801h/2049d	Inode: 64          Links: 5
    [root@hbs ~]# 
    
    
  • 格式化磁盘时,可以指定默认Inode和Block的大小,-b指定默认Block值,-I指定默认Inode值,命令如下:

    [root@hbs ~]# mkfs.ext4 -b 4096 -I 256 /dev/sdc
    

硬链接介绍

  • 一般情况下,文件名和inode编号是一一对应的关系,每个inode号码对应一个文件名。

  • 但UNIX/Linux系统多个文件名也可以指向同一个inode号码。这意味着可以用不同的文件名访问同样的内容,对文件内容进行修改,会影响到所有文件名。

  • 但删除一个文件名,不影响另一个文件名的访问。这种情况就被称为硬链接(hard link)。

  • 创建硬链接的命令:

       [root@hbs ~]# touch ha123               
       [root@hbs ~]# ll ha123 
       -rw-r--r-- 1 root root 0 Mar 29 21:40 ha123  文件名总数1
    
       [root@hbs ~]# ln ha123 liuaoni.txt        其中ha123为源文件,liuaoni.txt为目标文件
       [root@hbs ~]# ll ha123 
       -rw-r--r-- 2 root root 0 Mar 29 21:12 ha123     文件名总数加1变2了
       [root@hbs ~]# 
    
       源文件与目标文件的inode号码相同,都指向同一个inode。
       inode信息中          有一项叫做"链接数",记录指向该inode
       的文件名总数,这时会增加1,变成2,
    
       同样删除一个liuaoni.txt文件,就会使得ha123 inode节点中
       的"链接数"减1。如果该inode值减到0,表明没有文件名指向
       这个inode,系统就会回收这个inode号码,以及其所对应block区域
    
       [root@hbs ~]# ll ha123 liuaoni.txt 
       -rw-r--r-- 2 root root 0 Mar 29 21:40 ha123
       -rw-r--r-- 2 root root 0 Mar 29 21:40 liuaoni.txt
       [root@hbs ~]# rm -rf liuaoni.txt 
       [root@hbs ~]# ll ha123 
       -rw-r--r-- 1 root root 0 Mar 29 21:40 ha123
       [root@hbs ~]# 
    

软链接介绍

  • 除了硬链接以外,还有一种链接-软链接。文件ha123和文件liuaoni.txt的inode号码虽然不一样,但是文件liuaoni.txt的内容是文件ha123的路径。读取文件liuaoni.txt时,系统会自动将访问者导向文件ha123。
  • 无论打开哪一个文件,最终读取的都是文件ha123。这时,文件liuaoni.txt就称为文件ha123的"软链接"(soft link)或者"符号链接(symbolic link)。
  • 文件liuaoni.txt依赖于文件ha123而存在,如果删除了文件ha123,打开文件liuaoni.txt就会报错:“No such file or directory”。
  • 软链接与硬链接最大的不同是文件liuaoni.txt指向文件ha123的文件名,而不是文件ha123的inode号码,因此文件ha123的inode链接数不会发生变化

磁盘分区实战操作

企业真实场景由于硬盘常年大量读写,经常会出现坏盘,需要更换硬盘。或者由于磁盘空间不足,需添加新硬盘,新添加的硬盘需要经过格式化、分区才能被Linux系统所使用,虚拟机CentOS 7 Linux模拟DELL R730真实服务器添加一块新硬盘,不需要关机,直接插入用硬盘即可,一般硬盘均支持热插拔功能。企业中添加新硬盘的操作流程如下

  • 检测Linux系统识别的硬盘设备,新添加硬盘被识别为/dev/sdb,如果有多块硬盘,会依次识别成/dev/sdc、/dev/sdd等设备名称

    [root@localhost ~]# ll /dev/sd*
    brw-rw---- 1 root disk 8,  0 Mar 29 17:22 /dev/sda
    brw-rw---- 1 root disk 8,  1 Mar 29 17:22 /dev/sda1
    brw-rw---- 1 root disk 8,  2 Mar 29 17:22 /dev/sda2
    brw-rw---- 1 root disk 8,  3 Mar 29 17:22 /dev/sda3
    brw-rw---- 1 root disk 8, 16 Mar 29 17:22 /dev/sdb
    
    
  • 基于新硬盘/dev/sdb设备,创建磁盘分区/dev/sdb1

    [root@localhost ~]# fdisk /dev/sdb 
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write the
    Be careful before using the write command.
    
    Device does not contain a recognized partition table
    Building a new DOS disklabel with disk identifier 0x529a757c.
    Command (m for help): m    打印帮助菜单
    Command action
       a   toggle a bootable flag
       b   edit bsd disklabel
       c   toggle the dos compatibility flag
       d   delete a partition
       g   create a new empty GPT partition table
       G   create an IRIX (SGI) partition table
       l   list known partition types
       m   print this menu
       n   add a new partition
       o   create a new empty DOS partition table
       p   print the partition table
       q   quit without saving changes
       s   create a new empty Sun disklabel
       t   change a partition's system id
       u   change display/entry units
       v   verify the partition table
       w   write table to disk and exit
       x   extra functionality (experts only)
    
    Command (m for help): n    添加一个新分区
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p   选择主分区
    Partition number (1-4, default 1): 1  编号
    First sector (2048-41943039, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G 分区大小1G
    Partition 1 of type Linux and of size 1 GiB is set
    
    Command (m for help): w   保存退出
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    如果创建出错了,可以按 d 删除错误分区
    
  • 刷新磁盘,查看以分区的情况

    [root@localhost ~]# partprobe 
    [root@localhost ~]# fdisk -l|tail -10
    Disk identifier: 0x529a757c
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048     2099199     1048576   83  Linux
    
    Disk /dev/mapper/centos-swap: 536 MB, 536870912 bytes, 1048576 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
  • /dev/sdb1分区格式化,使用mount命令挂载到/data/目录

    [root@localhost ~]# mkfs.ext4 /dev/sdb1 
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    65536 inodes, 262144 blocks
    13107 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=268435456
    8 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
    	32768, 98304, 163840, 229376
    
    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    [root@localhost ~]# 
     [root@localhost ~]# mkdir -p /date      创建挂在目录
    [root@localhost ~]# mount /dev/sdb1 /date/      挂载/dev/sdb1分区至/data/目录
    [root@localhost ~]# df -h                   查看磁盘分区详情
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        30G  1.1G   29G   4% /
    devtmpfs        1.9G     0  1.9G   0% /dev
    tmpfs           1.9G     0  1.9G   0% /dev/shm
    tmpfs           1.9G  8.6M  1.9G   1% /run
    tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/sda1       197M  121M   77M  62% /boot
    tmpfs           378M     0  378M   0% /run/user/0
    /dev/sdb1       976M  2.6M  907M   1% /date
    [root@localhost ~]# 
    [root@localhost ~]# echo "mount /dev/sdb1 /date/" >>/etc/rc.local  将挂载分区命令加入/etc/rc.local开机启动
    
  • 自动挂载分区除了可以加入到/etc/rc.local开机启动之外,还可以加入到/etc/fstab文件中

    [root@localhost ~]# blkid 
    /dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
    /dev/sda1: UUID="e2a88a04-a2f1-44d1-b77b-517ea61a0735" TYPE="xfs" 
    /dev/sda2: UUID="wubYdM-dwdE-k7hm-Pf5Q-OIDE-oW49-BJflyB" TYPE="LVM2_member" 
    /dev/sda3: UUID="26a3bd57-2e86-419c-850a-231b282be9ea" TYPE="xfs" 
    /dev/sdb1: UUID="f98425af-9afa-42d9-a1fd-305d37833587" TYPE="ext4" 
    /dev/mapper/centos-swap: UUID="ae570ad5-531e-436a-bedf-5f5df71036a0" TYPE="swap" 
    [root@localhost ~]# vim /etc/fstab 
    [root@localhost ~]# tail -3 /etc/fstab 
    UUID=e2a88a04-a2f1-44d1-b77b-517ea61a0735 /boot                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0
    UUID="f98425af-9afa-42d9-a1fd-305d37833587" /date      ext4    defaults 0 0
    
     # /dev/sdb1   /date    ext4   defaults 0 0  这样写也可以,写UUID可以可以
    
  • 查看磁盘分区情况

    [root@localhost ~]# lsblk 
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0   30G  0 disk 
    ├─sda1            8:1    0  200M  0 part /boot
    ├─sda2            8:2    0  515M  0 part 
    │ └─centos-swap 253:0    0  512M  0 lvm  [SWAP]
    └─sda3            8:3    0 29.3G  0 part /
    sdb               8:16   0   20G  0 disk 
    └─sdb1            8:17   0    1G  0 part /date
    sr0              11:0    1  4.2G  0 rom  
    [root@localhost ~]# 
    
    

    MOUNT命令工具

  • Mount命令工具主要用于将设备或者分区挂载至Linux系统目录下,Linux系统在分区时,也是基于mount机制将/dev/sda分区挂载至系统目录,将设备与目录挂载之后,Linux操作系统方可进行文件的存储。

Mount命令参数详解

handlebars
 mount [-Vh]
 mount -a [-fFnrsvw] [-t vfstype]
 mount [-fnrsvw] [-o options [,...]] device | dir
 mount [-fnrsvw] [-t vfstype] [-o options] device dir
 -V:			                显示mount工具版本号;
 -l:			                    显示已加载的文件系统列表;
 -h:			                    显示帮助信息并退出;
 -v:			                    输出指令执行的详细信息;
 -n:			                    加载没有写入文件/etc/mtab中的文件系统;
 -r:			                    将文件系统加载为只读模式; 
 -a:			                    加载文件/etc/fstab中配置的所有文件系统;
 -o:				                指定mount挂载扩展参数,常见扩展指令:rw、remount、loop等,其中-o相关指令如下:
 -o atime:						系统会在每次读取文档时更新文档时间;
 -o noatime:						系统会在每次读取文档时不更新文档时间;
 -o defaults:						使用预设的选项 rw,suid,dev,exec,auto,nouser等;
 -o exec                         允许执行档被执行;
 -o user、-o nouser:				使用者可以执行 mount/umount的动作;
 -o remount:						将已挂载的系统分区重新以其他再次模式挂载;
 -o ro:							只读模式挂载;
 -o rw:							可读可写模式挂载;
 -o loop                          使用loop模式,把文件当成设备挂载至系统目录。
 -t:			                    指定mount挂载设备类型,常见类型nfs、ntfs-3g、vfat、iso9660等,其中-t相关指令如下:
 iso9660                         光盘或光盘镜像;
 msdos 	                        Fat16文件系统;
 vfat  	                        Fat32文件系统;
 ntfs	                            NTFS文件系统;
 ntfs-3g                          识别移动硬盘格式;
 smbfs 	                        挂载Windows文件网络共享;
 nfs		                        Unix/Linux文件网络共享。

企业常用Mount案例

mount  	/dev/sdb1    		/data 				挂载/dev/sdb1分区至/data/目录
mount 	/dev/cdrom   		/mnt 			挂载Cdrom光盘至/mnt目录;
mount 	-t ntfs-3g   		   /dev/sdc  	/data1	挂载/dev/sdc移动硬盘至/data1目录;
mount   -o remount,rw    	/ 		  			重新以读写模式挂载/系统;
mount 	-t  iso9660  -o loop  centos7.iso /mnt	将centos7.iso镜像文件挂载至/mnt目录;
mount   -t fat32   /dev/sdd1            /mnt    将U盘/dev/sdd1挂载至/mnt/目录;
mount   -t nfs 192.168.10.11:/data/    	/mnt	    将远程192.168.10.11:/data目录挂载至本地/mnt目录。

总结

  • 磁盘分区最多只能分 4个主分区

  • 还有一种就是 3个主分区,一个扩展分区。

  • 扩展分区不能直接使用,需要变成逻辑分区

  • fdisk分区命令参数如下,常用参数包括m、n、p、e、d、w。

    b						编辑bsd disklabel;
    c						切换dos兼容性标志;
    d						删除一个分区;
    g						创建一个新的空GPT分区表;
    G						创建一个IRIX(SGI)分区表;
    l						列出已知的分区类型;
    m						打印帮助菜单;
    n						添加一个新分区;
    o						创建一个新空DOS分区表;
    p						打印分区表信息;
    q						退出而不保存更改;
    s						创建一个新的空的Sun磁盘标签;
    t						更改分区的系统ID;
    u						更改显示/输入单位;
    v						验证分区表;
    w						将分区表写入磁盘并退出;
    x						额外功能。
    
    
    • 分区工具有fdisk和gdisk,当硬盘小于2T的时候我们应该用fdisk来分区,而当硬盘大于2T的时候则应用gdisk来进行分区

    • Block空间即将被占满, 但删除大文件也没有释放空间

      • 假设现在线上正在运行Nginx服务, Nginx产生的日志已经达到了20个G, 磁盘眼看就看沾满了, 请问不重启Nginx的方式如何处理
      • 是会删除文件, 但Nginx持续占用着文件, 所以空间并不会被释放
        rm -f  access.log 
        
      • 正确做法如下, 清空该文件即可释放文件内容
        > access.log
        

标签:文件,管理,分区,dev,Block,linux,磁盘分区,root,硬盘
来源: https://blog.csdn.net/weixin_42313749/article/details/115360142

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有