Java教程

磁盘与磁盘管理

本文主要是介绍磁盘与磁盘管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

磁盘及磁盘管理

1、磁盘介绍

SAS硬盘

SAS:串行连接SCSI接口

SAS:serial attached scsi,串行李拦截scsi接口,串行连接小型计算机系统接口

SAS是新一代的SCSI技术,SATA硬盘相同,都是采用串行技术获取高速,

SAS的接口是可以兼容SATA

硬盘尺寸

3.5寸涉及

2.5寸涉及

问题:并口硬盘和串口硬盘,哪个块?

由于8通道之间的互相干扰,传输速度就会收到了影响,当传输出错的时候要同时重新传8位的数据,速度越快,干扰越多;

串行没有干扰,如果传输出问题,重发最后一位即可;

磁盘种类

  • 希捷、西数、日历、HP、DELL、EMC、IBM
  • 固态:价格相对贵,寿命长、读取速度快
  • 机械:怕摔、怕磁、磁道寻址man
  • SATA:
  • SAS、SCSI
  • PCIE M.2

常见的磁盘

dell:sas 300g 15k 3.5英寸、128MB 6Gbp/S

  • SAS 2T 4T
  • 希捷 SEAGATE 2TB 7200转 128M SAS 企业级硬盘 6Gbp/S
  • 假SAS=SATA盘身+SAS接口)支持热插拔)
  • 硬盘:容量大+便宜
  • 提速度,假SAS做raid5 raid10 做分布式存储mfs、HDFS、GFS、

西部数据:

  • 黑盘、红盘、紫盘、蓝盘、金盘

ST是希捷

WD是西数

2、磁盘分区工具

硬盘分区标识

MBR概述:就是Master Boot Record 就是磁盘的主引导分区;

  • 磁盘的0柱面、0磁头、1扇区称为主引导分区(MBR分区);
  • 组成:主引导程序、硬盘分区表(DPT)和分区有效标志
  • 主引导程序:占446个字节
  • 分区表:64个字节
  • Magic number 占2个字节

分区编号:

  • 主分区:1~4
  • 扩展分区:不能使用的
  • 逻辑分区:5以上,而且建立在扩展分区之上

分区作用:

  • 主分区:主要用来启动操作系统,boot分区放到主分区上
  • 扩展分区:不能直接使用;

MBR分区操作

GPT的分区方式,没有限制主分区的个数

fdisk命令

  • 作用:帮助硬盘分区
  • 语法:fdisk+选项+硬盘路径
  • 选项:
    • -l:查看硬盘分区
  • 硬盘的命名方式:/dev/sd[a…z]n
    • /sda表示第一块硬盘,/sdb是第二块硬盘
    • n:代表分区
    • /dev是设备目录存放的位置

增加一块sdb硬盘

操作:

  • 虚拟机–>关机–>“编辑虚拟机”–>添加–>选择硬盘–>全部默认下一步

对sdb硬盘进行分区

具体的fdisk操作如下,解释如下

#查看一下sdb硬盘信息
[root@Node0 ~]# fdisk -l /dev/sdb

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

#对硬盘进行分区
[root@Node0 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x2d01abdc 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m				#获取帮助

	#获取帮助后有如下的操作信息
命令操作
   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)

#对sdb进行分区,分出一个sdb1
命令(输入 m 获取帮助):n							#对sdb硬盘进行分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)	#主分区
   e   extended									#拓展分区
Select (default p): p							#选择分区的是主分区
分区号 (1-4,默认 1):1						   #分区号为1,即sdb1
起始 扇区 (2048-41943039,默认为 2048):			  #起始的扇区-->选择默认
将使用默认值 2048								
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+2G 	#分区的大小
分区 1 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p							#分区的查看

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2d01abdc

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
命令(输入 m 获取帮助):w							#保存所做的分区
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。


#进入系统查看分区是否成功
[root@Node0 ~]# ls /dev/sdb*		#能看到信息就是成功了
/dev/sdb  /dev/sdb1

分区已经做出来了,但是还是不能使用的,需要格式化以及挂载才能使用

mkfs.ext4:创建文件格式命令

语法:mkfs.ext4或者mkfs.按两下tab键,多种格式选择

选项:

  • -f:强制分区
[root@Node0 ~]# mkfs.【接着按两下tab键】
mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.xfs

#创建文件系统
[root@Node0 ~]# mkfs.xfs  /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

#创建挂载点
[root@Node0 ~]# mkdir -p /sdb1
[root@Node0 ~]# mount /dev/sdb1 /sdb1

#挂载
[root@Node0 ~]# df -h | grep sdb
/dev/sdb1       2.0G   33M  2.0G    2% /sdb1

对已存在的sda硬盘进行分区,分出一个sda4

#查看一下硬盘的情况
[root@Node0 ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):p

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000be3b4

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048     5220351     2097152   82  Linux swap / Solaris
/dev/sda3         5220352    41943039    18361344   83  Linux

命令(输入 m 获取帮助):n					#这里我们发现我的系统无法分区,sda已经没有空间了;
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p
已选择分区 4
No free sectors available

#如果成功分区;当保存的时候会有这个报错提示
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
	#大概的意思就是如果想使用就使用reboot命令
	#另外一个就是使用
[root@Node0 ~]# partprobe 
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。

#还有一个命令特别管用partx  -a    重新获得新分区
[root@Node0 ~]# partx -a /dev/sdb
partx: /dev/sdb: error adding partition 1

解决无法卸载问题

#这里故意制造报错信息
[root@Node0 ~]# cd /sdb1/
[root@Node0 sdb1]# touch aaaa

#我们卸载一下分区		#--->这里就是直接报错了
[root@Node0 sdb1]# umount  /dev/sdb1
umount: /sdb1:目标忙。
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)

	#其实原因也是很简单,因为我们在这个分区中,会有这个报错;如果英文报错怎么办????
	#看不懂??看懂了也不明白-->怎么办?

#这里我们根据提示看看
[root@Node0 sdb1]# lsof /sdb1
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    7463 root  cwd    DIR   8,17       18   64 /sdb1		#看着这bash,代表有个进程在使用
lsof    7558 root  cwd    DIR   8,17       18   64 /sdb1
lsof    7559 root  cwd    DIR   8,17       18   64 /sdb1
[root@Node0 sdb1]# fuser  /sdb1							#使用这个命令也能看到
/sdb1:                7463c
[root@Node0 ~]# lsof /sdb1					#再退出这个目录看看,啥啥都没有
[root@Node0 ~]# fuser /sdb1					#同样的是啥啥都没有

#这时候直接卸载就可以了
[root@Node0 ~]# umount  /dev/sdb1

开机自启动配置

–>重要文件/etc/fstab

#这里以sr0作为例子操作
[root@Node0 ~]# vim /etc/fstab 
...........
UUID=bf38a86c-e409-47ed-aacb-27635c9c4adc swap                    swap    defaults        0 0
/dev/cdrom      /mnt/cdrom      iso9660 defaults        0       0
需要挂载的设备分区	挂载点	文件系统类型	挂载选项	是否备份	是否检测

我们可以看到一串那个啥UUID;

那么我们可以理解为在linux中,它是设备的唯一标识符

如果使用uuid挂载那么绝对没有问题,前提下不要复制错

#如何查看uuid
[root@Node0 ~]# blkid /dev/sr0
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 

#通常我们经常遇到查看硬盘的数量
[root@Node0 ~]# fdisk -l 
[root@Node0 ~]# lsblk -a
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 17.5G  0 part /
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0    2G  0 part 
sr0     11:0    1  4.3G  0 rom  /mnt/cdrom

/etc/fstabl文件系统类型分析

[root@Node0 ~]# vim /etc/fstab 
............
/dev/cdrom      /mnt/cdrom      iso9660 defaults        0       0

文件系统:
Async/sync			设置是否为同步方式运行,默认为async
auto/noauto			当执行mount -a 的命令时,此文件系统是否被主动挂载。默认为auto
rw/ro				是否以以只读或者读写模式挂载
exec/noexe			限制此文件系统内是否能够进行"执行"的操作
user/nouser			是否允许用户使用mount命令挂载
suid/nosuid			是否允许SUID的存在
Usrquota			启动文件系统支持磁盘配额模式---->这个比较重要
Grpquota			#启动文件系统对群组磁盘配额模式的支持
Defaults			#同时具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置 samba nfs

GPT分区模式

这种分区模式是使用大于2TB的硬盘的,

MBR分区不支持超过2TB的硬盘,因此我们也使用了GPT格式

那么什么是GPT分区

GPT,全局唯一标识分区表(GUID Partition Table),它使用128位GUID来唯一标识每个磁盘和分区,与MBR存在单一故障点不同,GPT提供分区表信息的冗余,一个在磁盘头部一个在磁盘尾部;它通过CRC校验和来检测GPT头和分区表中的错误与损坏;默认一个硬盘支持128个分区

对GTP格式进行分区

gdisk命令

作用:可以对GPT文件系统分区

用法和fdisk差不了多少

#直接使用命令gdisk
[root@Node0 ~]# gdisk /dev/sdb			#这里我们看到之前/sdb的分区是MBR文件格式就是dos还是什么的
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present					#明显的没有-->也有提示,如果强制分区就会删除原有的MBR文件系统
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************

Command (? for help): ?				#输入?查看帮助
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


#添加sdb2分区
Command (? for help): n						#添加分区
Partition number (2-128, default 2): 2		#扇区从2开始
First sector (34-41943006, default = 4196352) or {+-}size{KMGTP}: 
Last sector (4196352-41943006, default = 41943006) or {+-}size{KMGTP}: +2G	#分区大小
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 		#选择标签
Changed type of partition to 'Linux filesystem'
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/sdb.
The operation has completed successfully.

#查看一下
[root@Node0 ~]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective				#这里也有
  BSD: not present
  APM: not present
  GPT: present					#这里能够看到

Found valid GPT with protective MBR; using GPT.		#Using GPT
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2E90DFAB-5A13-4F08-85F3-2B49AD0A9B99
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 33554365 sectors (16.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem
   2         4196352         8390655   2.0 GiB     8300  Linux filesystem


GPT格式的另外一个命令

parted命令

[root@Node0 ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.


#实际操作
(parted) mklabel
New disk label type? gpt    (我们要正确分区大于2TB的磁盘,应该使用gpt方式的分区表,输入gpt后回车)

(parted) mkpart 
分区名称?  []? sdb5                                                      
文件系统类型?  [ext2]? ext4                                              
起始点? 0                                                                
结束点? 5                                                                
警告: You requested a partition from 0.00B to 5000kB (sectors 0..9765).
The closest location we can manage is 17.4kB to 1048kB (sectors 34..2047).
Is this still acceptable to you?
是/Yes/否/No? yes                                                         
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? ignore
(parted) print  

/etc/fstab修改错误直接造成ctrond+d报错

常见的报错;绝大部分原因就是fstab文件修改错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jqHE4UG1-1641049849280)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1630544180801.png)]

解决办法:

进单用户:修改fstab

或者直接使用密码登陆再修改fstab文件

3、拓展swap分区

swap分区的作用:在物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,当做内存使用

  • 分区需要格式化成swap格式
  • 使用swapon命令开启或者swapoff命令关闭

实验:

#首先查看一下内存空间
[root@node0 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         133        1723           9         123        1695
Swap:          2047           0        2047


#创建一个分区
[root@node0 ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):w


#格式化成swap
[root@node0 ~]# mkswap /dev/sdb1
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=db9e8de3-5b07-4a03-99e1-f0163716a23a


#增加到内存
[root@node0 ~]# swapon /dev/sdb1
[root@node0 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         133        1722           9         123        1695
Swap:          3071           0        3071

#关闭
[root@node0 ~]# swapoff /dev/sdb1
[root@node0 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         133        1723           9         124        1695
Swap:          2047           0        2047

使用文件形式来扩容swap分区

  • 当物理内存不够用,然后又没有多余的空间腾出来,可以使用文件的形式来拓展swap分区
#形成一个1G的文件
[root@node0 ~]# dd if=/dev/zero of=/root/swap.txt bs=100M count=10
记录了10+0 的读入
记录了10+0 的写出
1048576000字节(1.0 GB)已复制,6.69355 秒,157 MB/秒

#修改权限
[root@node0 ~]# ll /root/swap.txt 
-rw-r--r-- 1 root root 1048576000 9月   3 06:19 /root/swap.txt
[root@node0 ~]# chmod 0600 /root/swap.txt 

#把文件指定成swap分区
[root@node0 ~]# mkswap -f /root/swap.txt 
正在设置交换空间版本 1,大小 = 1023996 KiB
无标签,UUID=4e2aec65-85af-4494-a239-d3664caff9cd

#启用查看
[root@node0 ~]# swapon /root/swap.txt
[root@node0 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         133         694           9        1152        1663
Swap:          3047           0        3047

这篇关于磁盘与磁盘管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!