CentOS分区操作详解

时间:2022-05-29 09:04:33

磁盘分区

分区格式的两种选择:MBR和GPT

分区命令:

parted的操作都是实时生效的,小心使用,主要是用于大于2T硬盘,支持MBR和GPT两种格式。

用法:parted [选项]… [设备[命令[参数]…]…]

  • parted /dev/sdb mklabel gpt|msdos
    //选择分区格式

  • parted /dev/sdb print
    //查看分区

  • parted /dev/sdb mkpart primary 1 200 (默认M)
    //分出一个199M的分区

  • parted /dev/sdb rm1
    //删除分区1

    ==parted /dev/sdb mklabel gpt
    parted /dev/sdb mkpart primary 1 1G
    parted /dev/sdb print
    parted /dev/sdb mkpart primary 1001 20G
    parted /dev/sdb mkpart logical 20G 80G
    parted /dev/sdb rm 1==

gdisk 主要是去分GPT格式 (支持2T以上)

gdisk -l [-u] [device…]

子命令:
- p 分区列表
- t 更改分区类型
- n 创建新分区
- d 删除分区
- w 保存并退出
- q 不保存并退出

 gdisk   /dev/sdb
Command (? for help): n
Partition number (3-128, default 3):3
First sector (34-419430366, default = 44042240) or {+-}size{KMGTP}:
Last sector (44042240-419430366, default = 419430366) or {+-}size{KMGTP}: +20g
Hex code or GUID (L to show codes, Enter = 8300):一个ID号,默认就好
Command (? for help): p
Command (? for help):w 存盘退出

fdisk 分MBR格式(2T以下推荐使用)

fdisk -l [-u] [device…]

子命令:
- p 分区列表
- t 更改分区类型
- n 创建新分区
- d 删除分区
- w 保存并退出
- q 不保存并退出

fdisk /dev/sdb
Command (m for help): m
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-419430399, default 2048):
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399):+1G(必须严格区分大小写)
Command (m for help): p
Command (m for help): w

fdisk 实现非交互式分区:

 echo -e "n\np\n1\n\n+1G\nw\n"  |fdisk /dev/sdb

echo -e 激活转义符

  • \a 发出警告声
  • \n 回车

查看机器上有几个分区的方法:

  • lsblk
  • fdisk -l
  • ls /dev/sd*
  • cat /proc/partitions
  • echo ‘- - -’ > /sys/class/scsi_host/host2(可能不止一个)/scan(新插磁盘用这个可以看出来)

同步分区信息:

cetos 5或者7 :partprobe-重新设置内存中的内核分区表版本

centos6 :

新增分区同步: partx -a /dev/sda

删除分区同步: partx -d –nr 7-8 /dev/sda

查工具来自哪个包:

yum list |grep xfs 找安装包

MBR和GPT格式相互转换:

parted /dev/sdb mklabel msdos

**注意:分区名称不稳定
分区同步问题

执行完每个命令一定要看下,验证下结果,再做下一步。**

文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。


Linux文件系统:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap

光盘:iso9660

Windows:fat32, ntfs

Unix: FFS(fast), UFS(unix), JFS2

网络文件系统:NFS, CIFS

集群文件系统:GFS2, OCFS2(oracle)

分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre

RAW:未经处理或者未经格式化产生的文件系统

说明:

centos 7 默认 XFS

centos 6 默认 ext4

centos 5 默认 ext3

ext2与ext3相差一个日志功能(journal)

blkid 查看当前系统已有文件系统


创建文件系统

mkfs命令:

mkfs.FS_TYPE/dev/DEVICE

 [root@centos6: /root]# mkfs.ext4 /dev/sdb1 
[root@centos6: /root]# blkid
/dev/sdb1: UUID="fe5ae367-e43e-4a1e-b94e-43a472e3c941" TYPE="ext4"

mke2fs:ext系列文件系统专用管理工具

-t {ext2|ext3|ext4}

==-b {1024|2048|4096} ==

-L ‘LABEL’

-j: 相当于-t ext3

mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3

-i#: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小

-N #:为数据空间创建个多少个inode

-I 一个inode记录占用的磁盘空间大小,128—4096

-m #: 默认5%,为管理人员预留空间占总空间的百分比

-O FEATURE[,…]:启用指定特性

-O ^FEATURE:关闭指定特性

[root@centos6: /root]# mke2fs -t ext3 -b 4096 -L /mnt/sdb3 -i 8192 -m 3 /dev/sdb3

blkid:块设备属性信息查看

  • -U UUID: 根据指定的UUID来查找对应的设备

    [root@centos6: /root]# blkid -U 7e927cef-2b89-4091-a5ec-6170b0fbedb3
    /dev/sda6

  • -L LABEL:根据指定的LABEL来查找对应的设备

    [root@centos6: /root]#mkfs.ext4 -L /mnt/sdb2 /dev/sdb2 //给设备/dev/sdb2创建一个卷标/mnt/sdb2
    [root@centos6: /root]# blkid
    /dev/sdb2: LABEL=”/mnt/sdb2” UUID=”bdd7338f-c2c4-44ff-8ab2-ee6c4b46480a”TYPE=”ext4”
    [root@centos6: /root]# blkid -L /mnt/sdb2
    /dev/sdb2

e2label:管理ext系列文件系统的LABEL

e2label DEVICE [LABEL]

 [root@centos6: /root]# blkid
/dev/sdb2: LABEL="/mnt/sdb2" UUID="bdd7338f-c2c4-44ff-8ab2-ee6c4b46480a" TYPE="ext4"
[root@centos6: /root]# e2label /dev/sdb2 /app/sdb2
[root@centos6: /root]# blkid
/dev/sdb2: LABEL="/app/sdb2" UUID="bdd7338f-c2c4-44ff-8ab2-ee6c4b46480a" TYPE="ext4"

findfs:查找分区

findfs[options] LABEL=

[root@centos6: /root]# findfs LABEL="/app/sdb2"
/dev/sdb2
findfs[options] UUID=<uuid>
[root@centos6: /root]# findfs UUID="bdd7338f-c2c4-44ff-8ab2-ee6c4b46480a"
/dev/sdb2

tune2fs:重新设定ext系列文件系统可调整参数的值

-l:查看指定文件系统超级块信息;super block

-L ‘LABEL’:修改卷标

-m #:修预留给管理员的空间百分比

-j: 将ext2升级为ext3

-O: 文件系统属性启用或禁用,–O
^has_journal

-o: 调整文件系统的默认挂载选项,–o ^acl

-U UUID: 修改UUID号

dumpe2fs:

  • -h:查看超级块信息,不显示分组信息

    [root@centos6: /root]# dumpe2fs /dev/sdb1

tune2fs -l /dev/sdb1 查超级块的信息


# 文件修复

  • 常发生于死机或者非正常关机之后
    挂载为文件系统标记为“no clean”
    注意:一定不要在挂载状态下修复

fsck: File System Check

fsck-t FS_TYPE

-p: 自动修复错误

-r: 交互式修复错误

FS_TYPE一定要与分区上已经文件类型相同

e2fsck:ext系列文件专用的检测修复工具

-y:自动回答为yes

-f:强制修复

fsck /dev/sdb2 -y

注意:修复操作生产中慎用,尽量请专业公司来修复。


挂载

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

卸载:为解除此关联关系的过程

把设备关联挂载点:mount Point

卸载时:可使用设备,也可以使用挂载点
umount

挂载点下原有文件在挂载完成后会被临时隐藏

挂载点目录一般为空

挂载前一点要先查看下挂载情况,一旦已经挂载某个设备的目录,一定不要去挂载其他设备,不然以前目录下设备的文件被隐藏,导致以前目录中文件无法访问,严重话可能会导致部分服务宕机。

用mount命令挂载文件系统

mount [-fnrsvw] [-t vfstype] [-o options] device dir

device:指明要挂载的设备;

(1) 设备文件:例如/dev/sda5

(2) 卷标:-L ‘LABEL’, 例如-L ‘MYDATA’

(3) UUID, -U ‘UUID’:例如-U ‘0c50523c-43f1-45e7-85c0-a126711d406e’

(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

注意:

  • dir:挂载点
    事先存在;建议使用空目录

  • 进程正在使用中的设备无法被卸载

    mount /dev/sdb1 /mnt/sdb1 //挂载

    df //查看

    /dev/sdb1 999320 2564 927944 1% /mnt/sdb1

mount常用命令选项
- -t vsftype:指定要挂载的设备上的文件系统类型
- -r: readonly,只读挂载
- -w: read and write, 读写挂载
- -n: 不更新/etc/mtab,mount不可见(隐藏挂载,只能使用cat /proc/mounts)
- -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
- -L ‘LABEL’: 以卷标指定挂载设备
- -U ‘UUID’: 以UUID指定要挂载的设备
- -B, –bind: 绑定目录到另一个目录上

**查看内核追踪到的已挂载的所有设备:
cat /proc/mounts**

-o options:(挂载文件系统的选项),多个选项使用逗号分隔

async:异步模式

sync:同步模式,内存更改时,同时写磁盘

atime/noatime:包含目录和文件

diratime/nodiratime:目录的访问时间戳

auto/noauto:是否支持自动挂载,是否支持-a选项

exec/noexec:是否支持将文件系统上运行应用程序

dev/nodev:是否支持在此文件系统上使用设备文件

suid/nosuid:不否支持suid和sgid权限

remount:重新挂载

ro:只读

rw:读写

user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

acl:启用此文件系统上的acl功能

Defaults:相当于rw, nosuid, dev, exec, auto, nouser, async

查看挂载情况:

findmnt MOUNT_POINT

查看正在访问指定文件系统的进程:

lsof MOUNT_POINT

fuser -v MOUNT_POINT

终止所有在正访问指定的文件系统的进程:

fuser -km MOUNT_POINT

取消挂载卸载:

umount DEVICE

umount MOUNT_POINT

查看挂载关系

mount

cat /etc/mtab

cat /proc/mounts //隐藏挂载也可以看到

文件挂载配置文件

/etc/fstab每行定义一个要挂载的文件系统;

  #cat   /etc/fstab
UUID=6ef6b1fe-1da4-406f-a028-3530d277e279 / ext4 defaults 0 0

从左到右依次解释:

  • 要挂载的设备或伪文件系统
  • 挂载点
  • 文件系统类型
  • 挂载选项
  • 转储频率
  • 自检次序
  • 要挂载的设备

目录挂目录的配置文件写法:

/boot /mnt/boot  none  bind 0 0

文件系统挂文件的配置文件写法:

/root/partfile /mnt/file ext4 loop 0 0

生效: mount -a

重新挂载某个设备:

 mount -o remount /mnt/sdb1

处理交换文件和分区

交换分区是系统RAM的补充

基本设置包括:

创建交换分区或者文件:

分区完需要改ID为82,默认为83,按t更新,L可以查看可以更改的类型。

使用mkswap写入特殊签名

[root@centos6: /root]# mkswap  /dev/sdb5  -L swap2

•在/etc/fstab文件中添加适当的条目

 vim /etc/fstab
:r!blkid /dev/sdb2 //vim下读取某个分区的UUID
UUID=09149535-ae7e-4b41-bba7-917aa8d1cc19 /mnt/swap2 swap defaults 0 0

•使用swapon -a 激活交换空间

 [root@centos6: /root]# swapon -a //重新读取配置文件生效
  • swapon -s 查看谁提供swap

U盘插入使用

U盘显示的设备名称Sdd

sync强制写U盘,使用三次。

光盘做ISO文件

    cp /dev/sro /root/centos6.iso

U盘做ISO

    dd if=centos6.iso of=/dev/sdd

目录做成ISO文件

mkisofs -r -o etc.iso /etc/

直接挂载该文件:
mount -o loop etc.iso /nmt/cdrom //只能做yum源码

eject -t /dev/sro //弹出光盘

tune2fs -l /dev/sdb1 查超级块的信息

挂载次数: mount count

 tune2fs -C 33 /dev/sdb1

maximun mount
count:达到次数触发检查

    tune2fs -c 33 /dev/sdb1

check interval: 天为单位

    tune2fs -i 33w /dev/sdb1

default mount options: (none)

拒绝wang用户访问a文件
setfacl -m u:wang:0 a
设置该项时可能系统不支持

1.需要挂载的时候加选项进去,
改配置文件

/dev/sdb1  /mnt/sdb1 ext4 acl 0 0

2.tune2fs -o acl /dev/sdb1

tune2fs -l acl  /dev/sdb1 //查看超级块信息

看有没有acl选项
1. tune2fs -l acl /dev/sdb1

2.mount

用户在线的情况下,想要取消ACL功能

mount -o remout,noacl /mnt/sdb1

centos6 安装系统时候的分区默认是有acl功能的。
centos7默认都有。

记住一个重要信息:只要存到磁盘的数据就不会丢失,存到内存关机可能会丢失。


补充知识点:

ACL 是什么?

ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。

ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。

检查是否支持ACL

ACL需要Linux内核和文件系统的配合才能工作,当前我们能见到的大多数Linux发行版本默认都是支持的。但最好还是能够先检查一下:

sudo tune2fs -l /dev/sda1 |grep “Default mount options:”
Default mount options: user_xattr acl

我们能够看到默认情况下(Default mount options:)已经加入 acl 支持了。

如何设置ACL

我们可以使用setfacl和getfacl命令来设置或观察文件/目录的acl权限。

setfacl

参数不多,直接列出来了:

setfacl [-bkRd] [{-m|-x} acl参数] 文件/目录名

-m :配置后面的 acl
参数给文件/目录使用,不可与 -x 合用;

-x :删除后续的 acl 参数,不可与 -m 合用;

-b :移除所有的 ACL 配置参数;

-k :移除默认的 ACL 参数;

-R :递归配置 acl;

-d :配置“默认 acl
参数”,只对目录有效,在该目录新建的数据会引用此默认值;

getfacl

getfacl 文件/目录名

   [root@localhost: /root]# setfacl -m u:xiangge:rwx aaa4 
[1002][root@localhost: /root]# ll aaa4
-rw-rwxr--+ 1 root root 0 Apr 25 10:22 aaa4
[1003][root@localhost: /root]# getfacl aaa4
# file: aaa4
# owner: root
# group: root
user::rw-
user:xiangge:rwx
group::r--
mask::rwx
other::r--

针对组的提权使用 g就行

子文件/目录继承父目录的权限

这是一个很棒的例子,它能让我们创建的子文件或者子文件夹继承父文件夹的权限设置!

 mkdir mydir
ll -d mydir
drwxr-xr-x 2 root root 4096 May 28 09:35 mydir
setfacl –m d:u:apache:rwx mydir

注意参数 d 在这里起到了决定性的作用。

查看下属性的变化:

 getfacl mydir
...
default:user::rwx
default:user:apache:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

多了些 default开头的项,在mydir下创建一个新文件试试:

 touch mydir/abc
getfacl mydir/abc
...
user:apache:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
...