Linux磁盘管理
硬件设备文件名
IDE硬盘 /dev/hd[a-d] 就是N多针的那种
SCSI/SATA/USB硬盘 /dev/sd[a-d] SCSI为老式的服务器传输接口
光驱 /dev/cdrom或/dev/hdc
软盘 /dev/fd[0-1]
打印机25针 /dev/lp[0-2]
打印机USB /dev/usb/lp[0-15]
鼠标 /dev/mouse
关于挂载的姿势
Linux下没有盘符,只有挂载点,当然也是可以私下里称之为盘符的.
挂载: 即为分配盘符的过程.
几乎所有目录都可以作为挂载点,但是有一部分目录必须和/在同一分区中.
必须挂载的分区:
/ 根分区
swap分区 交换分区(物理内存4G以下内存的2倍,不超过2GB,4G以上,则等于物理内存)
推荐分区
boot 启动分区建议200M或几十M,如果不分配,会写在/分区.一旦/分区写满,系统就没法启动了.
通过文件系统结构来,理解挂载和目录,同时理解一下,系统分区时和目录的感觉.
系统的角度来看
/下的目录
# 以下所有目录,从系统的角度来讲都在/下
/boot
/home
/etc
/usr
/var
磁盘的角度来看
/boot /home /etc /usr /var
/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda3 /dev/sda3
虽然,所有目录在系统的角度来看,都在/下,
但是,Linux的所有目录,几乎都可以用作挂载点,
将不同的目录,挂载不同的分区.可以做到,万一一个分区满了,就无法开机.
也更加的方便管理了.
swap是给Linux内核调用用的,其实在安装系统的时候就会注意这一点.
选择swap是在分区格式的一列中而非挂载点,且选择swap格式后,不能选择挂载点.
由此可见一斑.也可以理解为,swap是一种分区格式.
df 检查linux服务器的文件系统的磁盘空间占用情况(同时也可作为查看当前挂载情况)
-l 仅显示本地磁盘(默认)
-a 全部文件系统的磁盘使用情况
-h 以1024进制计算最合适的单位显示磁盘容量
-H 以1000进制计算最合适的单位显示磁盘容量
-t <文件系统类型> 只显示选定文件系统的磁盘信息
-T 显示磁盘分区类型
-x <文件系统类型> 不显示选定文件系统的磁盘信息
du 统计磁盘上的文件大小
注意:
如果直接通过bkm统计后的都是四舍五入后的整数结果.
可以使用-h避免这一点.
-h 1024进制,以最合适的单位统计显示
-H 1000进制,以最合适的单位统计显示
-s 指定统计的目标,如:统计整个目录
-b 以byte为单位统计文件
-k 以KB为单位统计
-m 以MB为单位统计
分区管理
注意:
MBR分区
1.主分区和扩展分区总数不能超过4个
2.扩展分区只能有一个
3.扩展分区不能直接存储数据,必须在扩展分区内创建逻辑分区存取数据.
4.单个分区容量最大2TB
GPT分区
1.主分区个数限制128个,使扩展分区和主分区的概念变得模糊.
因为MBR扩展分区就是为了解决,主分区只能建4个的尴尬.
2.单个分区容量限制18EB注:1EB=1024PB 1PB=1024TB
3.GPT主分区中,不适合安装X86架构的系统,即32位的.
在保留原硬盘的基础上,给服务器添加新的硬盘
Linux系统中的硬盘设备,都是以文件形式存在于根目录下的dev目录下
硬件设备都是有Linux自动识别的.
此时硬盘并不能直接使用个,需要对硬盘进行,挂载,分区,格式化
MBR分区操作 fdisk该工具只能给硬盘做MBR分区
fdisk该工具只能给硬盘做MBR分区
fdisk -l
# sdb磁盘当下为为未分区的硬盘,都没有分区信息
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
# sda磁盘ubuntu16.04下分过区的硬盘显示如下
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0x761c815f
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 39845887 39843840 19G 83 Linux
/dev/sda2 39847934 41940991 2093058 1022M 5 Extended
/dev/sda5 39847936 41940991 2093056 1022M 82 Linux swap / Solaris
# 进入sdb磁盘的分区模式,
fdisk /dev/sdb
# 进入成功,输入m查看帮助信息
Command (m for help):
新建主分区
n 添加新的分区,随后会让选择是p:主分区 e:扩展分区
Command (m for help): n
Partition type
# 显示当前分区状况,0个主分区,0个扩展分区,还可以建4个主分区
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
p 新建主分区,需要继承n命令后操作
# 设置新建分区去主分区
Select (default p): p
# 设置分区编号为1,默认为1-4顺序
Partition number (1-4, default 1): 1
# 设置扇区起始位置,默认为上一个分区的最大扇区.
# 如果是第一个创建的,默认是2048起始
First sector (2048-20971519, default 2048): 2048
# 设置扇区结束位置,默认为磁盘的最后一个扇区,即:磁盘的最大空间.(支持直接用+号指定G和M等)
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +1000M
# 提示成功
Created a new partition 1 of type 'Linux' and of size 1000 MiB.
p 查看已经添加的分区,未继承任何命令,直接输入p的情况下
Command (m for help): p
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x69c4a924
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 2050047 2048000 1000M 83 Linux
新建扩展分区
# 新建分区
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
# 选择新建分区为,扩展分区
Select (default p): e
# 分区编号为2
Partition number (2-4, default 2): 2
# 扇区起始位置,默认为上一个分区的结束位置.
First sector (2050048-20971519, default 2050048): 2050048
# 扇区结束位置,默认为为磁盘最大的扇区位置(即:磁盘全部剩余部分)
Last sector, +sectors or +size{K,M,G,T,P} (2050048-20971519, default 20971519): +2G
# 提示成功
Created a new partition 2 of type 'Extended' and of size 9 GiB.
# 扩展分区是不能直接使用的,必须在扩展分区里,新建逻辑分区,
# 对比以前装windows系统时,用到的磁盘管理器可以理解到这一点.
第一个逻辑分区
# 新建分区,此时发现e已经不见了,因为,扩展分区只能有一个
# 同时提醒我们,新建逻辑分区,分区编号从5开始
Command (m for help): n
Partition type
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
# 选择新建逻辑分区,(由上面的from5,可知该分区是建立在扩展分区5号的基础上的)
Select (default p): l
# 设置分区编号
Adding logical partition 5
# 设置扇区起始位置,该起始位置
First sector (2101248-6293503, default 2101248):
# 设置扇区结束位置
Last sector, +sectors or +size{K,M,G,T,P} (2101248-6293503, default 6293503): +100M
# 提示创建成功
Created a new partition 5 of type 'Linux' and of size 100 MiB.
第二个逻辑分区
Command (m for help): n
Partition type
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (2308096-6293503, default 2308096):
Last sector, +sectors or +size{K,M,G,T,P} (2308096-6293503, default 6293503): 100M
Last sector, +sectors or +size{K,M,G,T,P} (2308096-6293503, default 6293503): +100M
Created a new partition 6 of type 'Linux' and of size 100 MiB.
查看磁盘信息
# 使用p查看磁盘的分区信息
Command (m for help): p
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x69ab06fd
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
/dev/sdb2 2099200 6293503 4194304 2G 5 Extended
/dev/sdb5 2101248 2306047 204800 100M 83 Linux
/dev/sdb6 2308096 2512895 204800 100M 83 Linux
删除分区
# 使用命令d进入删除分区的操作
Command (m for help): d
# 选择要删除的分区编号
Partition number (1,2,5,6, default 6): 2
Partition 2 has been deleted.
# 2号分区为扩展分区,旗下有2个逻辑分区.删除了扩展分区后,逻辑分区自然也就没了.
Command (m for help): p
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Geometry: 255 heads, 63 sectors/track, 1305 cylinders
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x69ab06fd
Device Boot Start End Sectors Size Id Type
保存规划好的分区
# 使用 命令w保存,之前规划好的分区
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
GPT分区 parted 既可以进行MBR分区也可以进行GPT分区
parted 同时支持交互模式和命令模式
交互模式
类似fdisk那样,一问一答的形式进行
命令模式
fdisk设置分区需要最后使用w命令进行保存分区设置
parted是及时生效的,设置完之后,quit即可
如果忘了这句话什么一次,可以看下面设置分区时的例子.
我们在设置分区大小的时候,默认起始位置和结束位置是MB的.
如设置一个分区为1G的分区 使用命令 mkpart disk_1 1 1000
可以通过unit来设置MB和GB....等
# 设置,分区模式为GB
unit GB
parted命令进入分区模式,默认进入第一块硬盘
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
select切换硬盘
(parted) select /dev/sdb
Using /dev/sdb
mklabel设置分区类型MBR或GPT
mklabel msdos/gpt
# 如果原磁盘有数据时,转换磁盘类型,所有数据都会被摧毁.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
print 查看分区状况, 包含分区类型详情
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
print all 查看所有硬盘状况,包含分区类型
(parted) print all
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 20.4GB 20.4GB primary ext4 boot
2 20.4GB 21.5GB 1072MB extended
5 20.4GB 21.5GB 1072MB logical linux-swap(v1)
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
mkpart交互模式新建分区
# 新建分区
(parted) mkpart
# 设置分区名
Partition name? []? disk_1
# 设置格式化的格式
File system type? [ext2]? ext2
# 开始位置,此处的开始位置不是fdisk中的扇区位置,而是从多少M开始(可以修改).更加的人性化
Start? 0
# 结束位置,到多少M结束
End? 1000
# 提示没有4K对齐,这时候我们取消操作,牺牲0-1的空间,达到4K对齐效果
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? cancel
# 新建分区
(parted) mkpart
# 设置分区名
Partition name? []? disk_1
# 设置分区格式化的格式
File system type? [ext2]? ext2
# 设置分区开始位置为1M
Start? 1
# 设置分区结束位置为2000M
End? 2000
# 查看刚才新建的分区,1M-2000M共1999MB的空间
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2000MB 1999MB ext2 disk_1
mkpart命令行模式新建分区
# mkpart 分区名 起始MB 结束MB
(parted) mkpart disk_2 2000 3000
注意:如果新建分区的起始位置和上一分区的结束位置重叠,
系统会提示从上一分区的结束位置开始建一个,如果同意的话,空间肯定会比预期的要小.
如:上一个1-10,这一个5-20.这时候会提示,是否将这次的新建分区改为10-20的.
(parted) mkpart disk_2 1000 3000
Warning: You requested a partition from 1000MB to 3000MB (sectors 1953125..5859375).
The closest location we can manage is 2000MB to 3000MB (sectors 3905536..5859375).
Is this still acceptable to you?
Yes/No? No
rm删除分区
# 删除分区使用rm 分区编号
# 打印当前磁盘状况,查看分区编号
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2000MB 1999MB ext2 disk_1
2 2000MB 3000MB 1000MB disk_2
# 删除2号分区
(parted) rm 2
(parted)
quit退出操作, parted是及时生效的.操作完,退出即可.
linux 分区的格式化
需要明白一点,格式化(高级格式化)又称逻辑格式化不是用来清除数据的.
他是根据用户选定的文件系统,(如:fat32,ntfs,ext2,ext3,ext4等)
在磁盘特定的区域写入特定的数据,在分区中画出一片用于存放文件分配表,目录表等
用于文件管理的磁盘空间.主要是写入文件系统.
1.将整个分区,分成等大小的数据块.每个数据块(block)默认大小4KB(可以修改).
如果一个文件,在块里放不下,就会分割在其他块,不是按顺序的.
没有占满空间的块,即使有剩余空间,也不会再给别的文件用.
2.建立分区表,记录了 每个文件的ID号,修改时间,权限,文件保存位置
这里的ID号,不叫ID号,叫做I节点(英文i node).
格式化会重置这一切.
可见格式化可以清空数据,但是不是为了这个.而是为了写入文件系统.
注意MBR分区表中的,扩展分区是不可以格式化的.
只有主分区和逻辑分区可以.
GPT分区格式化之后,使用fdisk是没有办法看到各个分区的文件类型的.
必须使用parted查看.
该工具支持,MBR 和GPT分区格式化,下面两个效果是一样的.
mkfs.格式化类型 分区名
mkfs -t 格式化类型 分区名
# 查看该磁盘的分区
sdb
sdb1
sdb2
# 格式化sdb1为ext3
mkfs.ext3 /dev/sdb1
# 操作如下
root@ubuntu-Python:~# mkfs.ext3 /dev/sdb1
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 487936 4k blocks and 122160 inodes
Filesystem UUID: 4dfd612c-44bf-4886-958b-a22e1b7b074c
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
挂载与卸载分区分区
理论上,挂载分区可以挂载到系统的任意位置
挂载必须,挂载到一个已经存在的挂载点.即:已存在的目录位置.
查看系统中已挂载的设备
mount
按照/etc/fstab的内容,自动挂载. 其实/etc/fstab的内容可以开机挂载的
mount -a
mount -t 文件系统 -o 特殊选项 设备名 挂载点
-t 文件系统:
加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660(光盘默认)等.
window中的fat32在这里使用vfat挂载,下面挂载U盘中可以看到
-o 特殊选项:
可以指定挂载的额外选项
rw/ro 读写/只读,默认rw
exec/noexec 执行/不执行 设定是否允许,在文件系统中执行,可执行文件,默认可执行.
atime/noatime 更新访问时间/不更新访问时间 默认为更新
async/sync 异步/同步 默认异步
user/nouser 允许/不允许 设定文件系统是否允许普通用户挂载,默认不允许.
只有root可以挂载分区.
auto/noauto 自动/手动 mount -a 命令执行时,是否会自动安装/etc/fstab文件内容挂载
默认为自动
defaults 定义默认值相当于,rw,suid,dev,exec,auto,nouser,async这七个选项
.......太多了,不做累述.
建议不要进行修改,要不然可能出问题.不够,有时候为了防止U盘病毒的话,可以限制一下exec.
卸载挂载点
unmount 挂载点
unmount /mnt/mydisk
挂载U盘
# 注意Linux中不支持NTFS文件系统的.
# 想支持,需要重新编译内核支持NTFS.或者安装ntfs-3g.但是注意,最终也只是只读功能.
# U盘其实就相当于一个硬盘,查看系统中已识别的硬盘, 查看插入的U盘的设备名
fdisk -l
# 开始挂载U盘,这里的vfat相当于windows中的fat32
mount -t vfat /dev/sdb1 /mnt/usb/
# 如我们将sdb下的所有分区都挂载到mnt下的mydisk中
1. mkdir -p /mnt/mydisk
2. mount /dev/sdb1 /mnt/mydisk
3. mount /dev/sdb2 /mnt/mydisk
注意mount的挂载不具有永久性,重启系统后就会消失.
设置分区的自动挂载 vim /etc/fstab
注意,光盘U盘之类的不要配置开机自动挂载,否则不插的话无法开机
# 设备位置 挂载点 分区类型
/dev/sdb1 /mnt/mydisk ext3 defaults 0 0
Linux的swap交换分区
1. 建立一个普通分区
2. 修改分区类型的16进制编码
3. 格式化交换分区
4. 启用交换分区
这里的swap的设置和分区,格式化.都是用的fdisk.
具体使用parted可不可以,应该也是可以的但是没试过.
swap是给Linux内核调用用的,其实在安装系统的时候就会注意这一点.
选择swap是在分区格式的一列中而非挂载点,且选择swap格式后,不能选择挂载点.
由此可见一斑.也可以理解为,swap是一种分区格式.
1.新建一个普通分区,具体操作不在演示
fdisk /dev/sdb
2.设置分区编号
# 查看分区信息,可知分区编号
Command (m for help): p
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0xe018a9ad
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20971519 20969472 10G 83 Linux
# 通过t命令设置分区编号
Command (m for help): t
# 选择分区
Selected partition 1
# 通过L命令查看分区编号列表,得知82为Linux的swap分区格式,然后通过p查看分区ID已变成了82
Partition type (type L to list all types): L
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
# 保存修改
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
3.格式化swap分区
/mkswap 分区位置
# 执行命令格式化,swap分区sdb1
root@ubuntu-Python:~# mkswap /dev/sdb1
root@ubuntu-Python:~# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old ext3 signature.
Setting up swapspace version 1, size = 10 GiB (10736365568 bytes)
no label, UUID=1fb5ed35-23dd-4bc0-a956-fc53f688ee5f
4.启用swap分区
swapon 分区位置
# 启用sdb1交换分区
swapon /dev/sdb1
5.查看swap分区加载状况
free
# 查看分区状况
root@ubuntu-Python:~# free
total used free shared buff/cache available
Mem: 998308 105468 398060 6216 494780 706360
Swap: 1046524 0 1046524
6. 关闭swap交换分区
swapoff 分区位置
# 关闭sdb1交换分区
swapoff /dev/sdb1