linux磁盘及文件系统

简介: linux磁盘及文件系统

一、linux 文件系统及磁盘分区



1.1 磁盘简介


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


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


  • IDE硬盘接口在Linux中设备名为/dev/hda,SAS、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 ~]# 


1.2 linux 磁盘与文件系统简介


image.png

image.png

image.png


1.3 mount 挂载


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


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目录。


二、案例演示



2.1 gdisk 给磁盘分区


  • 使用 gdisk 创建一个 500M 的 xfs 文件系统,并将它挂载到 /data/test目录下


# 1.列出所有磁盘
[admin@rivers~]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0    2M  0 part 
├─sda2   8:2    0    1G  0 part /boot
├─sda3   8:3    0   10G  0 part /
├─sda4   8:4    0    5G  0 part /home
└─sda5   8:5    0    1G  0 part [SWAP]
sr0     11:0    1  4.2G  0 rom  /run/media/admin/CentOS 7 x86_64
# 2. 查看磁盘分区表类型
[admin@rivers~]$ sudo parted /dev/sda print
[sudo] admin 的密码:
Model: VMware, VMware Virtual S (scsi)   # (厂商)模块名称
Disk /dev/sda: 42.9GB                    # 磁盘总容量
Sector size (logical/physical): 512B/512B # 物理扇区容量
Partition Table: gpt                     # 这里显示是gpt格式
Disk Flags: pmbr_boot
Number  Start   End     Size    File system     Name  标志
 1      1049kB  3146kB  2097kB                        bios_grub
 2      3146kB  1077MB  1074MB  xfs
 3      1077MB  11.8GB  10.7GB  xfs
 4      11.8GB  17.2GB  5369MB  xfs
 5      17.2GB  18.3GB  1074MB  linux-swap(v1)
[admin@rivers~]$ 
# 3.使用gdisk 创建分区
[admin@rivers~]$ sudo  gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): ?               # ? 命令帮助,想到fdisk中的m
b       back up GPT data to a file
c       change a partition's name
d       delete a partition            # 删除一个分区
i       show detailed information on a partition
l       list known partition types
n       add a new partition           # 增加一个分区
o       create a new empty GUID partition table (GPT)
p       print the partition table     #打印出分区表 (常用)
q       quit without saving changes   # 不保存分区直接离开
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit     #保存分区后离开
x       extra functionality (experts only)
?       print this menu
Command (? for help): p
Disk /dev/sda: 83886080 sectors, 40.0 GiB               # 磁盘文件名/扇区总数与总容量
Logical sector size: 512 bytes                          # 单一扇区大小为512 bytes 
Disk identifier (GUID): 00B9BA4D-D71C-462B-82F4-091B4C43A1D5  #磁盘的GPT标识码
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 48230333 sectors (23.0 GiB)          # 下面为完整的分区信息
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02     # 第一个分区信息
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        23074815   10.0 GiB    0700  
   4        23074816        33560575   5.0 GiB     0700  
   5        33560576        35657727   1024.0 MiB  8200  
Command (? for help): n                                 # 新增加一个
Partition number (6-128, default 6):                    # 标识符
First sector (34-83886046, default = 35657728) or {+-}size{KMGTP}: # 开始扇区
Last sector (35657728-83886046, default = 83886046) or {+-}size{KMGTP}: +500M 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):  #在分区内可能的文件系统类型 8300 
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sda: 83886080 sectors, 40.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 00B9BA4D-D71C-462B-82F4-091B4C43A1D5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 47206333 sectors (22.5 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        23074815   10.0 GiB    0700  
   4        23074816        33560575   5.0 GiB     0700  
   5        33560576        35657727   1024.0 MiB  8200  
   6        35657728        36681727   500.0 MiB   8300  Linux filesystem
# 8300 linux 文件系统
# 8200 swap 文件系统
Command (? for help): w  # 保存
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y  # 按Y 退出
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
[admin@rivers~]$ 
[admin@rivers~]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0    2M  0 part 
├─sda2   8:2    0    1G  0 part /boot
├─sda3   8:3    0   10G  0 part /
├─sda4   8:4    0    5G  0 part /home
└─sda5   8:5    0    1G  0 part [SWAP]
sr0     11:0    1  4.2G  0 rom  /run/media/admin/CentOS 7 x86_64
# 4. 更新linux 内核的分区表信息
 [admin@rivers~]$ lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0    2M  0 part 
├─sda2   8:2    0    1G  0 part /boot
├─sda3   8:3    0   10G  0 part /
├─sda4   8:4    0    5G  0 part /home
├─sda5   8:5    0    1G  0 part [SWAP]
└─sda6   8:6    0  500M  0 part 
sr0     11:0    1  4.2G  0 rom  /run/media/admin/CentOS 7 x86_64
[admin@rivers~]$ 
# 5.格式化刚建立的分区
[admin@rivers~]$ sudo mkfs.xfs /dev/sda6
meta-data=/dev/sda6              isize=512    agcount=4, agsize=32000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=128000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[admin@rivers~]$ 
# 6.查看/dev/sda6的UUID
[admin@rivers~]$ sudo blkid|grep "/dev/sda6"
/dev/sda6: UUID="fc584ce9-b4ff-4c54-8c2c-9ed6cf54dc1d" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="1aa87728-47cd-428d-b5bd-32a076c8f537" 
[admin@rivers~]$ 
# 7.创建挂载点,且挂载
[admin@rivers~]$ sudo mount  UUID="fc584ce9-b4ff-4c54-8c2c-9ed6cf54dc1d" /data/test
[admin@rivers~]$ df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        10G  4.6G  5.5G   46% /
devtmpfs        1.8G     0  1.8G    0% /dev
tmpfs           1.8G     0  1.8G    0% /dev/shm
tmpfs           1.8G  9.1M  1.8G    1% /run
tmpfs           1.8G     0  1.8G    0% /sys/fs/cgroup
/dev/sda4       5.0G   37M  5.0G    1% /home
/dev/sda2      1014M  158M  857M   16% /boot
tmpfs           367M  4.0K  367M    1% /run/user/42
tmpfs           367M   36K  367M    1% /run/user/1000
/dev/sr0        4.3G  4.3G     0  100% /run/media/admin/CentOS 7 x86_64
/dev/sda6       497M   26M  472M    6% /data/test
[admin@rivers~]$ 
# 8.删除刚建立的 6号分区,先卸载,再说删除
[admin@rivers~]$ sudo umount /data/test/
[admin@rivers~]$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p  # 打印下以存在的分区
Disk /dev/sda: 83886080 sectors, 40.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 00B9BA4D-D71C-462B-82F4-091B4C43A1D5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 47206333 sectors (22.5 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        23074815   10.0 GiB    0700  
   4        23074816        33560575   5.0 GiB     0700  
   5        33560576        35657727   1024.0 MiB  8200  
   6        35657728        36681727   500.0 MiB   8300  Linux filesystem
Command (? for help): d   # 按 d 删除分区
Partition number (1-6): 6
Command (? for help): p
Disk /dev/sda: 83886080 sectors, 40.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 00B9BA4D-D71C-462B-82F4-091B4C43A1D5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 48230333 sectors (23.0 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        23074815   10.0 GiB    0700  
   4        23074816        33560575   5.0 GiB     0700  
   5        33560576        35657727   1024.0 MiB  8200  
Command (? for help): w  # 保存
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
[admin@rivers~]$ sudo lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0    2M  0 part 
├─sda2   8:2    0    1G  0 part /boot
├─sda3   8:3    0   10G  0 part /
├─sda4   8:4    0    5G  0 part /home
└─sda5   8:5    0    1G  0 part [SWAP]
sr0     11:0    1  4.2G  0 rom  /run/media/admin/CentOS 7 x86_64
[admin@rivers~]$ 


2.2 parted 创建文件系统


  • 使用parted 创建一个swap 分区


# 0.检查是否有parted 工具,没有就安装一个这里我有,不需安装
[admin@rivers~]$ which parted  
/usr/sbin/parted
#[admin@rivers~]$ yum -y install parted
# 1. 先列出 磁盘分区表类型,及分区情况
[admin@rivers~]$ sudo parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt   #2. 这里看到的是GPT类型,使用gdisk或者parted分区
Disk Flags: pmbr_boot
Number  Start   End     Size    File system     Name  标志
 1      1049kB  3146kB  2097kB                        bios_grub
 2      3146kB  1077MB  1074MB  xfs
 3      1077MB  11.8GB  10.7GB  xfs
 4      11.8GB  17.2GB  5369MB  xfs
 5      17.2GB  18.3GB  1074MB  linux-swap(v1)
 # 2. 将 原本gpt格式的 磁盘变为 mbr 分区表。(很危险,请勿乱用!无法恢复!)
 @ 这条命令我变了一个磁盘/sdb ,新添加的磁盘,请不要用/sda 去弄。!
 [admin@rivers~]$ sudo parted /dev/sdb mklabel msdos
 [admin@rivers~]$parted /dev/sdb print
 Model: VMware, VMware Virtual S (scsi)
 Disk /dev/sdb: 10.7GB
 Sector size (logical/physical): 512B/512B
 Partition Table: msdos   # 现在这里变了,变成MBR了。
 Disk Flags: 
Number  Start  End  Size  Type  File system  Flags
 使用parted 分区,格式化为 vfat 类型大小为 500M
 [admin@rivers~]$ sudo parted /dev/sda mkpart primary ext4 18.3GB 18.8GB
[sudo] admin 的密码:
信息: You may need to update /etc/fstab.
[admin@rivers~]$ sudo partprobe /dev/sda    
parted  [设备名]  [命令]  [参数]
# 固定以 MB 格式显示
parted   /dev/sdb  unit  mb  print  
# 将GPT格式的分区表,将它改变为 MBR格式 
 parted /dev/sdb mklabel msdos
# 在建立一个 500M的 ext4 格式的
parted /dev/sda mkpart primary ext4 18.3GB 18.8GB


2.3 创建大文件做 swap 分区


  • 使用dd 命令,创建一个大文件,格式化做swap分区,并挂载


# 1. 创建一个 大文件,块大小为1M ,共计512个块
[admin@rivers~]$ dd if=/dev/zero of=/tmp/dvd bs=1M count=512
记录了512+0 的读入
记录了512+0 的写出
536870912字节(537 MB)已复制,30.7426 秒,17.5 MB/秒
  # 2. 查看,并格式化文件
  [admin@rivers~]$ sudo ls -lih /tmp/dvd 
  16838973 -rw-rw-r--. 1 admin admin 512M 12月 29 20:09 /tmp/dvd
  [admin@rivers~]$ sudo mkswap /tmp/dvd 
  mkswap: /tmp/dvd: warning: wiping old swap signature.
  正在设置交换空间版本 1,大小 = 524284 KiB
  无标签,UUID=79a3af17-1c7a-4025-a596-c34782619b7a
  [admin@rivers~]$ 
  #3. 启动swap ,利用swapon 将/tmp/dvd 启动(swapoff 关闭 swap file)
  [admin@rivers~]$ sudo swapon /tmp/dvd
  # 4. 使用swapoff 关闭,并设置自启动
  [admin@rivers~]$ sudo swapoff /tmp/dvd 
  [admin@rivers~]$ tail -1 /etc/fstab 
  /tmp/dvd    swap  swap  defaults 0 0
  [admin@rivers~]$ 


总结



  • 一个 可以被挂载的数据 通常 称为 文件系统,不是硬盘分区


  • linux 传统文件系统为 ext2,该文件系统主要包含信息有:


超级区块:包含inode/区块总量,使用量、剩余量,文件系统格式等信息


inode:文件属性,一个文件一个inode,同时记录文件数据所在区块号码


数据区块:实际记录文件的内容,若文件太大,会占用多个数据区块


  • ext2 文件系统的数据存取为 索引式文件系统


  • 硬链接:只是多了一个文件名 对该inode 号码的连接,不能跨文件连接、不能连接目录


  • 符号链接:快捷方式。


  • 磁盘使用 必须经过 分区、格式化与挂载。常用命令 为 parted、gdisk、fdisk、mount、partproe等


  • 启动自动挂载,可以编写/etc/fstab 文件,然后使用 mount -a测试


相关文章
|
3天前
|
存储 缓存 Linux
【Linux】文件系统
在打开文件之前,我们需要找到文件 -> 就要从磁盘中找到对应文件 -> 通过文件路径与文件名
20 4
|
3天前
|
存储 缓存 数据管理
深入理解 Linux 文件系统的层次结构
【4月更文挑战第30天】 本文旨在探讨和解析 Linux 操作系统中文件系统的结构与原理。不同于通常的摘要,我们将直接深入到文件系统的核心概念,包括其目录结构、关键组件以及它们如何相互作用以支持 Linux 操作系统的功能。通过剖析文件系统的层次性设计,我们能够更好地理解其在数据管理、用户权限控制和系统安全性方面的重要性。
|
3天前
|
Ubuntu Linux 数据库
【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器
【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器
|
3天前
|
存储 Linux
Linux为新创建的磁盘分区添加文件系统
Linux为新创建的磁盘分区添加文件系统
|
3天前
|
Linux Windows 存储
|
3天前
|
Linux
Linux系统的磁盘管理
Linux系统的磁盘管理
|
3天前
|
存储 算法 Linux
【Linux】详解文件系统以及周边知识
【Linux】详解文件系统以及周边知识
|
3天前
|
存储 Linux 编译器
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
16 0
|
3天前
|
Linux
Linux磁盘配额
在Linux系统中,当用户的空间占用接近或超过预设的软限制时,系统会警告用户磁盘空间将满。软限制是允许用户使用的磁盘空间的最大值,在此限制下,用户仍有宽限期来减少空间使用。如果在宽限期内用户未减少空间占用,达到硬限制,软限制将升级为硬限制。硬限制是用户可以使用的绝对最大值。默认的宽限期是7天,如果超过这个期限,用户的空间限制会立即降低到硬限制。
|
3天前
|
存储 Linux Shell
Linux文件系统
Linux文件系统
21 2