实操Linux磁盘管理(分区、格式化、挂载)

在Linux系统中,磁盘管理是一个必学的知识点。正确地进行磁盘分区、格式化和挂载可以确保我们能够充分利用磁盘空间并高效地存储和访问数据。

相比于Windows系统中的简单盘符管理,Linux中的磁盘管理更加复杂且灵活。在Linux系统中,一切设备都存储在/dev目录下,如磁盘、键盘、鼠标等。因此,如果要使用磁盘,我们需要对其进行分区、格式化和挂载等操作,以便将磁盘挂载到已知的文件夹下才可以正常使用。

在实操Linux磁盘管理前,最好先了解什么是磁盘和文件系统才可以进行快速实操。

本文使用Linux发行版本为 Ubuntu 23.10 但是用其它的发行版也不会存在太大差异。
▼正片开始▼▼正片开始▼🔔

(一):基本介绍

  磁盘分区是将物理磁盘划分为逻辑部分的过程。当我们购买一个硬盘时,它通常是一个连续的存储单元,被称为未分区的空间。通过进行磁盘分区,我们可以将硬盘划分为多个逻辑部分,每个部分被称为分区。
  在Linux系统中,可以使用各种工具来进行磁盘分区,如fdisk、gdisk等。通过这些工具,我们可以选择要分区的磁盘,并指定分区的大小、类型等信息。比如对/dev/sda设备分区,每个分区都会被分配成一个唯一的设备名(如 /dev/sda1 、 /dev/sdb2 等),并可以在文件系统中进行访问和管理。
  分区前要搞明白自己磁盘有多大,2T以内可以使用MBR分区也可以使用GPT分区,但是超过2T必须使用GPT分区;MBR分区表请使用fdisk分区,GPT分区表请使用gdisk分区!

磁盘分区的好处包括:    1:空间管理:通过分区,我们可以更好地组织和管理磁盘上的数据。        - 不同的分区可以用于存储不同类型的数据,例如操作系统文件、应用程序、用户数据等。    2:数据保护:如果一个分区损坏或出现故障,其他分区的数据通常不会受到影响。        - 这样我们可以更好地保护和恢复数据。    3:多系统支持:磁盘分区还可以用于安装多个操作系统。        - 每个操作系统可以被安装在不同的分区上,各自独立运行。

(二):fdisk分区工具

  若你的磁盘大小在2T以内的话,是可以使用fdisk命令来进行MBR分区的哟,切记超过2T的盘千万不要使用这个fdisk命令,因为你会发现,再怎么分区都不会超过2T,那就代表你剩下的容量无法被使用到,还有就是最好可以往电脑插入另外一块盘测试。

Ⅰ:安装fdisk命令(正常都有):    sudo apt-get -y install fdisk   # Ubuntu安装    sudo yum -y install fdisk       # Centos安装
Ⅱ:fdisk命令基础语法:    fdisk -help         # 查看操作手册    fdisk -l            # 查看服务器存在多少磁盘和磁盘分区(可以借助 "| grep xx" 来查询)    fdisk -l /dev/sdb   # 查询"/dev/sdb"盘分区
Ⅲ:fdisk磁盘分区(首先得进入磁盘,如进入/dev/sdb设备;fdisk /dev/sdb)    d:删除分区    F:列出未分区的空闲区    l:列出已知可设置的分区类型(如扩展分区的类型就是05)    n:添加新分区    p:打印分区表    t:更改分区类型(可以通过'l'列出来的类型中选择)    v:检查分区表    i:打印某个分区的相关信息    m:打印此菜单    w:将分区表写入磁盘并退出(就是保存之前的分区操作)    q:退出而不保存更改    g:在当前磁盘上创建一个新的 GPT 分区表    G:在当前磁盘上创建一个空的 GPT (IRIX) 分区表    o:在当前磁盘上创建一个空的 DOS 分区表(MBR分区下默认就是DOS)    s:在当前磁盘上创建一个空的 Sun 分区表

基本示例:基本示例:

点击示例1:为"/dev/sdc"磁盘设备进行基本的分区

"涉及 n 选项"进入 '/dev/sdc' 磁盘    >>  fdisk /dev/sdc    命令(输入 m 获取帮助):n    # 代表创建分区    分区类型       p   主分区 (0 primary, 0 extended, 4 free)       e   扩展分区 (逻辑分区容器)    选择 (默认 p):p    分区号 (1-4, 默认  1): 1    第一个扇区 (2048-41943039, 默认 2048): 2048    Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, 默认 41943039): +2G    创建了一个新分区 1,类型为“Linux”,大小为 2 GiB。补充:关于'+/-size{K,M,G,T,P}'的意思是,分区的大小可以不用写扇区结束大小,而是直接设置易懂的大小,     如 +2G、+512M、+128k 等等,这样就会简单点。'注:最多四个主分区,若有多个分区需要在其中一个主分区内创建一个逻辑分区,并在这个逻辑分区内创建多个分区。'点击示例2:删除一个分区,并且将"/dev/sdc3"更改为FAT12分区
# 下面这个是我创建的几个测试分区;# 可以看出/dev/sdc4分区为扩展分区,它的起点和末尾正好把sdc5~sdc7包裹着# 这3个分区其实都是在sdc4的逻辑分区内创建的分区    设备       启动     起点     末尾     扇区 大小 Id 类型    /dev/sdc1           2048  4196351  4194304   2G 83 Linux    /dev/sdc2        4196352 12584959  8388608   4G 83 Linux    /dev/sdc3       12584960 23070719 10485760   5G 83 Linux    /dev/sdc4       23070720 62914559 39843840  19G  5 扩展    /dev/sdc5       23072768 35655679 12582912   6G 83 Linux    /dev/sdc6       35657728 44046335  8388608   4G 83 Linux    /dev/sdc7       44048384 62914559 18866176   9G 83 Linux# 删除分区直接使用 d 选项    命令(输入 m 获取帮助):d    分区号 (1-7, 默认  7): 7     # 这里的数值1-7代表可以选择的分区    分区 7 已删除。# 更改分区类型直接使用 t 选项    命令(输入 m 获取帮助):t    分区号 (1-6, 默认  6): 3     # 选择需要改变的分区    Hex code or alias (type L to list all): l  # 输入L会打印可选分区类型,在里面查找十六进制分区序号    Hex code or alias (type L to list all): 05 # 05代表FAT12的十六进制序号# 使用选项 t 查看还有多少空间未被分区    命令(输入 m 获取帮助):F    未分区的空间 /dev/sdc:9 GiB,9659482112 个字节,18866176 个扇区    单元:扇区 / 1 * 512 = 512 字节    扇区大小(逻辑/物理):512 字节 / 512 字节        起点     末尾     扇区 大小    44048384 62914559 18866176   9G

点击示例3:使用 p 选项查看分区信息

# 使用选项 p 查看分区信息      Disk /dev/sdc:30 GiB,32212254720 字节,62914560 个扇区    Disk model: VMware Virtual S    单元:扇区 / 1 * 512 = 512 字节    扇区大小(逻辑/物理):512 字节 / 512 字节    I/O 大小(最小/最佳):512 字节 / 512 字节    磁盘标签类型:dos    磁盘标识符:0x1d3d3a3d    设备       启动     起点     末尾     扇区 大小 Id 类型    /dev/sdc1           2048  4196351  4194304   2G 83 Linux    /dev/sdc2        4196352 12584959  8388608   4G 83 Linux    /dev/sdc3       12584960 23070719 10485760   5G  1 FAT12    /dev/sdc4       23070720 62914559 39843840  19G  5 扩展    /dev/sdc5       23072768 35655679 12582912   6G 83 Linux    /dev/sdc6       35657728 44046335  8388608   4G 83 Linux

注意事项:注意事项:

  • 使用fdisk命令时,请小心操作,确保正确选择设备文件名。

  • 在对磁盘进行分区操作前,务必备份重要数据,以防止数据丢失。

  • 若出现bash: fdisk: command not found的错误提示,说明fdisk命令未安装。

(三):gdisk分区工具

  由于fdisk命令不能很好的支持GPT分区;而MBR分区不支持大于2T的分区,对于超过2T的硬盘分区来说只能使用GPT分区,所以就要使用gdisk命令;gdisk也可以处理MBR分区的硬盘,甭管硬盘多大,都可以分区。

Ⅰ:安装gdisk命令(正常都有):    sudo apt-get -y install gdisk   # Ubuntu安装    sudo yum -y install gdisk       # Centos安装
Ⅱ:gdisk命令基础语法:    gdisk 设备名称    示例:gdisk /dev/sdf        # 对'/dev/sdf'磁盘分区,注意设备后面没有数字,有数字的是已分区的,(使用lsblk查看磁盘)
Ⅲ:gdisk磁盘分区(首先得进入磁盘后才可以执行这些选项)    b:将GPT数据备份到文件    c:更改分区的名称    d:删除一个分区    i:显示分区的详细信息    l:列出已知的分区类型    n:增加一个分区    o:创建新的空GUID分区表(GPT)    p:打印分区表    q:不保存退出    r:恢复和转换选项(仅限专家)    s:对分区排序    t:更改分区类型    v:验证磁盘    w:将分区表写入磁盘并退出(就是保存之前的分区操作)    x:额外功能(仅限专家)    ?:打印菜单

基本示例:基本示例:

点开示例1:进入”/dev/sdf“分区的磁盘并新增分区

"【进入需要分区的磁盘】"    >> gdisk /dev/sdf        GPT fdisk (gdisk) version 1.0.9        Partition table scan:          MBR: protective          BSD: not present          APM: not present          GPT: present        '扫描到了GPT分区表,若GPT: not present时可以使用 o 选项重置一下'        Found valid GPT with protective MBR; using GPT."【新增分区 n选项】"    >> Command (? for help): n        '分区编号(1-128,默认为1);这里最多创建128个分区'            Partition number (1-128, default 1):        '设置开始扇区'            First sector (34-8589934558, default = 2048) or {+-}size{KMGTP}: 2048        '设置结束扇区(我们不需要自己去计算扇区号码,通过+容量的这个方式)'        '通过+容量方式,其实gdisk主动去帮你算出最接近你需要的容量的扇区号码。'            Last sector (2048-8589934558, default = 8589932543) or {+-}size{KMGTP}: +1G        '当前分区类型为8300(Linux文件系统),具体可以通过L选项查询'            Current type is 8300 (Linux filesystem)        '自己设置想要的十六进制代码或GUID类型(默认8300,可以使用L查询)'            Hex code or GUID (L to show codes, Enter = 8300):8300        '已将分区类型更改为“Linux文件系统”'            Changed type of partition to 'Linux filesystem''##### 特殊说明 #####'    1:在Last sector那行绝对不要使用默认值!默认值会将所有的容量用光!因为默认选择最大的扇区号码!        我们可以通过+G、+M、+K、+T等方式设置,所以我加上+1G代表分1GB空间的分区,        不需要计算sector的数量,gdisk会根据你填写的数值。    2:Linux一般分区类型都是8200/8300/8e00等三种格式Windows几乎都用0700这样;如果忘记这些,        可以在gdisk内按下L来显示类型;如下面几个常用的:            8200(交换分区)      8300(普通Linux文件系统)    8e00(扩展LVM逻辑卷)

点开示例2:分区的查询

"【输出目前磁盘的状态 p选项】"    >> Command (? for help): p        '磁盘文件名:扇区总数,磁盘容量'            Disk /dev/sdf: 8589934592 sectors, 4.0 TiB        '当前是虚拟机的磁盘(其实并不是真实的4T物理磁盘)'            Model: VMware Virtual S        '一个扇区大小512字节'            Sector size (logical/physical): 512/512 bytes        '磁盘的GPT标识'            Disk identifier (GUID): D3DD6483-3414-4722-BAE4-8A4B608172E7        '分区表最多可容纳128个条目'            Partition table holds up to 128 entries        '主分区表从扇区2开始,到扇区33结束'            Main partition table begins at sector 2 and ends at sector 33        '第一可用扇区为34,最后可用扇区为8589934558'            First usable sector is 34, last usable sector is 8589934558        '分区将在2048个扇区边界上对齐'            Partitions will be aligned on 2048-sector boundaries        '总可用空间为8589934525个扇区(4.0 TiB)'            Total free space is 8589934525 sectors (4.0 TiB)            Number  Start (sector)    End (sector)  Size       Code  Name               1            2048         2099199   1024.0 MiB  8300  Linux filesystem               2         2099200         6293503   2.0 GiB     0700  Microsoft basic data下半部的分区表信息主要在列出每个分区槽的个别信息,具体如下:    Number:分区槽编号,1号指的是/dev/sdf1    Start (sector):每一个分区槽的开始扇区号码位置    End (sector):每一个分区的结束扇区号码位置,与start之间可以算出分区槽的总容量    Size:分区槽的容量了    Code:分区槽内的可能的文件系统类型。Linux为8300, swap为8200。        '注:不过这个类型只是一个提示而已,不见得真的代表此分区槽内的文件系统!'    Name:文件系统的名称等等。从上表我们可以发现几件事情:    整个磁盘还可以进行额外的分区,因为最大扇区为8589934525,但只使用到6293503号而已。    分区槽的设计中,新分区通常选用上一个分区的结束扇区号码数加1作为起始扇区号码!
点开示例3:删除和保存
"【分区删除】">> Command (? for help): d  Partition number (1-2): 1 # 可选2个已经分区好的删除,删除后使用 p 选项查看  "【分区保存】"  >> 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/sdf.  The operation has completed successfully.

(四):观察磁盘分区状态

1:lsblk命令

  lsblk命令其实是列出系统上的所有磁盘列表(全称:List Block Device)

"语法:"    >> lsblk [-选项参数] [设备]        选项与参数:            -d:仅列出磁盘本身,并不会列出该磁盘的分区数据            -f:同时列出该磁盘内的文件系统名称            -i:使用ASCII的线段输出,不要使用复杂的编码(在某些环境下很有用)            -m:同时输出该装置在/dev底下的权限数据(rwx的数据)            -p:列出该装置的完整文件名!而不是仅列出最后的名字而己。            -t:列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等"示例1:列出本系统下的所有磁盘与磁盘内的分区信息"    >> lsblk        NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT        sda      8:0    0    20G  0 disk        ├─sda1   8:1    0     1M  0 part        └─sda2   8:2    0    20G  0 part /var/snap/firefox/common/host-hunspell                                         /    # 被挂载到根目录        sdb      8:16   0    20G  0 disk    # 可以看出sdb盘被分成了2个分区(用了7G分区)        ├─sdb1   8:17   0     5G  0 part        └─sdb2   8:18   0     2G  0 part        sdc      8:32   0    60G  0 disk    # 一个完整未被分区的磁盘60G        sdd      8:48   0    30G  0 disk        sde      8:64   0    40G  0 disk        sdf      8:80   0     4T  0 disk        └─sdf2   8:82   0     2G  0 part        sr0     11:0    1  1024M  0 rom"目录介绍:"    NAME:就是设备的文件名。会省略/dev等前导目录!    MAJ:MIN:其实核心认识的设备都是透过这两个代码来熟悉的!分别是主要:次要装置代码!    RM:是否为可卸除装置(removable device),如光盘、USB磁盘等等    SIZE:磁盘或者分区容量    RO:是否为只读设备的意思    TYPE:是磁盘(disk)、分区槽(partition) 还是只读存储器(rom)等输出    MOUTPOINT:挂载点!
 

2:blkid命令

  blkid命令是列出设备的UUID等参数(全称:Block Id);虽然lsblk已经可以使用-f来列出文件系统与设备的UUID数据,不过直接使用blkid来找出装置的UUID更方便;UUID是全局唯一标识符,Linux会将系统内所有的装置都给予一个独一无二的标识符,这个标识符就可以拿来作为挂载或者是使用这个设置或文件系统之用了。

图片

3:parted命令

  parted命令是列出磁盘的分区表类型与分区类型(这里暂且不说它的分区)

语法:    >> parted 设备名称 print示例(列出/dev/sdb1磁盘信息):    >> parted /dev/sdb1 print        型号:VMware, VMware Virtual S (scsi)  '磁盘的模块名称(厂商)'        磁盘 /dev/sdb: 21.5GB                  '磁盘的总容量'        扇区大小 (逻辑/物理):512B/512B         '磁盘的每个逻辑/物理扇区容量'        分区表:msdos                          '分区表格式(MBR/GPT),此时msdos可以认为MBR'        磁盘标志:            编号   起始点   结束点   大小     类型      文件系统  标志             1    1049kB  5370MB  5369MB  primary   ext3             2    5370MB  7517MB  2147MB  primary   ext3             3    7517MB  9665MB  2147MB  primary   ext3             4    9665MB  21.5GB  11.8GB  extended             5    9666MB  12.9GB  3221MB  logical   ext2             6    12.9GB  14.0GB  1074MB  logical   ext3             7    14.0GB  17.2GB  3221MB  logical             8    17.2GB  19.3GB  2147MB  logical             9    19.3GB  21.5GB  2141MB  logical
 

(一):基本介绍

  格式化是在对磁盘进行分区后,对某个分区进行格式化操作后以准备存储数据。格式化会清空该分区中的所有数据,并在磁盘上创建一个新的文件系统,以便操作系统可以正确地读取和写入数据。分区格式化的本质就是需要在分区上创建一个文件系统;而文件系统是组织和访问数据的方式,包括文件和目录的结构,数据的存储和检索,以及权限、属性和元数据的管理。一般文件系统的类型如Windows支持NTFS和FAT32,而Linux支持ext4和XFS等;我们需要按照实际需求而创建不同的文件系统。
  格式其实就是创建文件系统(make filesystem),所以说创建系统的命令也就是mkfs,它只是一个综合指令;当我们创建ext4文件系统时则需要写成 mkfs -t ext4 设备号,其实本质上是调用mkfs.ext4命令,我们也可以直接写成 mkfs.ext4 设备号(推荐) 来直接创建。

'查看系统可以支持创建的文件系统命令:'    >> mkfs [tab键] [tab键]             mkfs        mkfs.bfs    mkfs.cramfs     mkfs.ext2       mkfs.ext3   mkfs.ext4           mkfs.fat    mkfs.minix  mkfs.msdos      mkfs.ntfs       mkfs.vfat'上面打印的就是可以创建的文件系统,可以使用 mkfs -t 的方式,也可以直接使用 mkfs.xxx的方式'
'也可以通过如下命令查询:'    >> ll /sbin/mkfs.*        -rwxr-xr-x 1 root root 22912 10月  6 05:27 /sbin/mkfs.bfs*        -rwxr-xr-x 1 root root 35144 10月  6 05:27 /sbin/mkfs.cramfs*        lrwxrwxrwx 1 root root     6  7月 27 02:26 /sbin/mkfs.ext2 -> mke2fs*        lrwxrwxrwx 1 root root     6  7月 27 02:26 /sbin/mkfs.ext3 -> mke2fs*        lrwxrwxrwx 1 root root     6  7月 27 02:26 /sbin/mkfs.ext4 -> mke2fs*        -rwxr-xr-x 1 root root 52048  3月 23  2022 /sbin/mkfs.fat*        -rwxr-xr-x 1 root root 43408 10月  6 05:27 /sbin/mkfs.minix*        lrwxrwxrwx 1 root root     8  3月 23  2022 /sbin/mkfs.msdos -> mkfs.fat*        lrwxrwxrwx 1 root root     6  2月 15  2023 /sbin/mkfs.ntfs -> mkntfs*        lrwxrwxrwx 1 root root     8  3月 23  2022 /sbin/mkfs.vfat -> mkfs.fat*'其实我们可以发现如mkfs.ext2命令是软链接到mke2fs命令上,mkfs.ntfs命令是软链接到mkntfs''比如:mke2fs就相当于使用的mkfs.ext2'
 

  通过上面可以知道mkfsmke2fs都是用于创建文件系统的命令,具体看下面说明。

(二):mkfs创建文件系统

  mkfs它是一个通用的命令,用于创建各种不同类型的文件系统,可以根据指定的文件系统类型来创建。它可以创建的文件系统有ext2、ext3、ext4、bfs、ntfs等。mkfs命令提供了更广泛的选项和功能,适用于不同操作系统和场景。但是一般不推荐直接使用mkfs -t 文件系统命令,而是使用如mkfs.ext4等命令文件。

1:mkfs.ext2~4命令

'mkfs.ext2、mkfs.ext3、mkfs.ext4语法:'    [-c|-l 文件名] [-b 块大小] [-C 簇大小] [-i 每inode的字节数] [-I inode大小] [-J 日志选项]        [-G 弹性组大小] [-N inode数] [-d 根目录] [-m 保留块所占百分比] [-o 创始系统名]        [-g 每组的块数] [-L 卷标] [-M 上一次挂载点] [-O 特性[,...]] [-r 文件系统版本]        [-E 扩展选项[,...]] [-t 文件系统类型] [-T 用法类型] [-U UUID] [-e 错误行为][-z 撤销文件]        [-jnqvDFKSV] 设备 [块数]    参数详细介绍:        -c:在制作文件系统前先检查是否有坏块        -b:设置文件系统内的逻辑块(block)大小,(如1k,2k,4k;不过Linux最大为4K)        -L:设置文件系统卷标Label(后面可以使用卷标挂载这个磁盘分区)        -j:创建ext3日志文件系统,mkfs.ext3自带了该选项;        -m:保留块所占百分比,它是预留给管理员磁盘块(参数为数值,不要加%)        -i:指定每一个inode的字节数,但是必须是block大小单位的整数倍        -U:设置磁盘分区内文件系统的UUID(必须写标准UUID)        '下面命令基本使用说明:'    1:虽然使用mkfs.ext2非日志系统,但是加上 -j 就会强制变为ext3文件系统    2:mkfs.ext2就相当于mkfs -t ext2'命令:'    >> mkfs.ext2 -b 2k -L demoTest -j /dev/vdb1        mke2fs 1.46.5 (30-Dec-2021)        /dev/vdb1 有一个 ext3 文件系统                创建于 Fri Jan 19 23:41:00 2024        无论如何也要继续?(y,N) y        创建含有 1048576 个块(每块 2k)和 131072 个 inode 的文件系统        文件系统 UUID:a94d46ba-4f33-4ab3-9cd4-cfee31e78367        超级块的备份存储于下列块:                16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816
        正在分配组表:完成        正在写入 inode表:完成        创建日志(16384 个块):完成        写入超级块和文件系统账户统计信息:已完成            >> blkid /dev/vdb1          /dev/vdb1: LABEL="demoTest" UUID="a94d46ba-4f33-4ab3-9cd4-cfee31e78367"        SEC_TYPE="ext2" BLOCK_SIZE="2048" TYPE="ext3" PARTUUID="1c2f79e7-01"
 

(三):mke2fs创建文件系统

  mke2fs是mkfs的一个特定实现,专门提供了一些特定于ext文件系统的一个专门的工具。是mkfs.ext2,mkfs.ext3,mkfs.ext4的衍生命令,其用法也是和这些命令一样。​​​​​​​

'若直接使用mke2fs则默认是创建ext2文件系统'说明:    对/dev/vdb2创建一个ext类型的文件系统,并指定为ext3日志文件系统,      并且他的逻辑块Block大小为2K,Inode字节数大小4K,保留块占比5%'命令:'    >> mke2fs -j -b 2048 -m 5 -i 4096 /dev/vdb2        mke2fs 1.46.5 (30-Dec-2021)        /dev/vdb2 有一个 ext3 文件系统                创建于 Fri Jan 19 23:41:22 2024        无论如何也要继续?(y,N) y        创建含有 524288 个块(每块 2k)和 262144 个 inode 的文件系统        文件系统 UUID:456fbfb6-cbab-45c3-a0a9-36e89ee755f1        超级块的备份存储于下列块:                16384, 49152, 81920, 114688, 147456, 409600, 442368        正在分配组表:完成                                    正在写入 inode表:完成                                    创建日志(16384 个块):完成        写入超级块和文件系统账户统计信息:已完成        '发现我没有使用-L设置卷标,其实后期也是可以设置的:'    'e2label'命令设置卷标,如下:        e2label  /dev/vdb2           查看卷标        e2label  /dev/vdb2 demoLabel 设置卷标
 

(四):查看或调整文件系统信息

1:tune2fs命令

1:查看指定设备的文件系统详细信息:
    tune2fs -l /dev/sdb
2:设置强制检查前,文件系统还可以挂载的最大次数:
    tune2fs -c 15 /dev/sdb
3:设置10天后将自动检查文件系统:
    tune2fs -i 10d /dev/sdb
4:设置3周后将自动检查文件系统:
    tune2fs -i 3w /dev/sdb
5:设置6个月后将自动检查文件系统:
    tune2fs -i 6m /dev/sdb
6:添加日志功能,将ext2转换成ext3文件系统:
    tune2fs -j /dev/sdb
7:设置指定的磁盘分区文件系统保留空间为40000个磁盘块:
    tune2fs -r 40000 /dev/sdb

2:dumpe2fs命令

  这个命令是一个用于显示ext2、ext3、ext4文件系统详细信息的命令行工具。它可以显示文件系统的超级块、块组描述符、inode表、目录结构、块位图、inode位图等信息。​​​​​​​

语法:    dumpe2fs [-bfghimxV] [-o superblock=<超级块编号>] [-o blocksize=<块大小>] 设备    选项详细说明:        -b:显示文件系统中保留的损坏块。        -f:强制执行。        -g:简洁显示块组描述符列表(如:63:1032192:-1:-1:786447:786463:790304)。        -h:只显示超级块信息,而不显示任何块组描述符详细信息。        -i:显示从e2image获得的文件系统信息,使用设备作为image文件的路径名。        -x:以十六进制显示文件系统信息        -V:显示命令版本信息,并且退出        -o superblock=superblock:检查文件系统时,使用指定大小的超级块。            '此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。'        -o blocksize=blocksize:检查文件系统时,指定块大小。            '此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。'    设备参数:        指定要显示信息的文件系统所在的设备。        示例:    dumpe2fs  /dev/sda2        Inode count:              1310720   文件系统inode号数量        Block count:              5242112   文件系统block块总数        Reserved block count:     262105    保留的block块数量        Free blocks:              2735814   空闲的block块数量        Free inodes:              1144046   空闲的inode号数量        First block:              0         第一个block块号        Block size:               4096      block块大小4KB        Fragment size:            4096      碎片大小        Reserved GDT blocks:      1024      保留GDP的块总数        Blocks per group:         32768     每个块组的block块数量        Inodes per group:         8192      每个块组的inode号数量        Inode blocks per group:   512       每个块组inode占用的block块数量        Flex block group size:    16        inode表大小        First inode:              11        文件系统的第一个inode号        Inode size:               256       每个inode的大小为256字节        .....省略部分        组 159:(块 5210112-5242111) 校验和 0xd815 [INODE_UNINIT, ITABLE_ZEROED]          块位图位于 4718607 (bg           inode 位图位于 4718623 (bg           inode 表位于 4726304-4726815 (bg           32000 个可用块,8192 个可用 inode,0 个目录 ,8192 个未使用的 inode          可用块数:5210112-5242111          可用 inode 数:1302529-1310720        后面省略...
 

(一):基本介绍

  将存储设备(如硬盘、分区、网络存储等)与文件系统关联起来,并通过挂载的方式挂载到任意根目录内的挂载点上,这样文件系统就能够访问我们挂载的存储设备上数据了。在计算机中,存储设备通常被划分为多个分区或卷。每个分区都可以包含一个独立的文件系统。然而这些文件系统并不会自动在文件系统层次结构中可用,需要通过挂载将其与特定的目录关联起来。具体来说挂载涉及以下概念:

  • 存储设备: 可以是物理磁盘、分区、USB驱动器、网络存储等。每个存储设备都有一个唯一的设备名称,例如/dev/sda、/dev/sdb1等。

  • 文件系统: 存储设备上的数据组织和管理方式,例如ext4、NTFS、FAT32等。每个文件系统都有自己的特性和属性。

  • 挂载点: 是文件系统在文件系统层次结构中的位置,也是存储设备连接的目标。它是一个现有的空目录,用于访问存储设备上的文件和文件夹。

  • 挂载命令: 用于将存储设备与指定的挂载点关联起来的命令。在Linux中使用mount命令执行挂载操作。

  通过挂载,文件系统的目录结构和文件可以在挂载点处访问,并与其它文件系统协同工作。例如将USB闪存驱动器挂载到/mnt目录下,可以通过/mnt目录来浏览和操作闪存驱动器中的文件。需要注意的是,只有具备足够权限的用户(通常是root或使用sudo)才能执行挂载操作。此外挂载是一种临时操作,系统重启后需要重新挂载设备,除非将其添加到/etc/fstab文件中以实现自动挂载。


挂载前需要注意如下几点:挂载前需要注意如下几点:

  • 一个文件系统不应该被重复挂载在不同的挂载点(目录)中。

  • 单一目录不应该重复挂载多个文件系统。

  • 要作为挂载点的目录,理论上应该都是空目录才是。

  尤其后两点!如果挂载的挂载点内目录不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时地消失。举个例子,假设你的/home原本与根目录(/)在同一个文件系统中,底下原本就有/home/test与/home/vbird两个目录。然后你想要加入新的磁盘,并且直接挂载到了/home底下,那么当你挂载上新的分区槽时,则/home目录显示的是新分区槽内的资料,至于原先的test与vbird这两个目录就会暂时的被隐藏掉了,注意是隐藏而不是覆盖! 等到新分区槽被卸除之后,则/home原本的内容就会再次地跑出来。

常用磁盘挂载的步骤:常用磁盘挂载的步骤:

  1. 确认磁盘或分区:使用工具如lsblkfdisk -l来确定要挂载的磁盘或分区的设备名称;例如 /dev/sda、 /dev/sdb1等。

  2. 创建挂载点:选择一个空目录作为挂载点。可使用mkdir命令创建目录,如mkdir /mnt/mydisk。

  3. 执行挂载:使用mount命令将磁盘或分区挂载到目标目录上(待挂载的设备上需要存在文件系统才可被挂载)。

  4. 访问磁盘内容:现在就可以通过挂载点路径(此处为/mnt/mydisk)来访问磁盘上的文件和文件夹。

  5. 自动挂载:若希望在每次系统启动时自动挂载磁盘,您可以将相应的挂载信息添加到/etc/fstab文件中。

  6. 执行卸载:可以使用umount命令来卸载挂载的磁盘或分区。

(二):挂载设备​​​​​​​

用法规范:    mount [-lhV]    mount -a [选项]    mount [选项] [--source] <源> | [--target] <挂载点>    mount [选项] <设备> <挂载点>    mount <操作> <挂载点> [<目标>]常用选项:    -l:列出当前系统中已挂载的文件系统,而不显示未挂载的文件系统。    -h:查看帮助文档    -V:查看版本号    -a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)    -t:指定要挂载的设备上的文件系统类型;    -r:以只读方式挂载文件系统(同-o ro)    -w:以读写方式挂载文件系统(默认,同-o rw)    -v:打印当前进行的操作(如挂载中执行:mount:/dev/vdb1 已挂臷到 /mnt/game)    -n:不更新/etc/mtab    -o:--options <列表>:挂载选项列表,以英文逗号分隔挂载的source设备:    <设备>:按路径指定设备,例如/dev/sda5    <文件>:设备文件,    -L 'LABEL':以卷标指定挂载设备;例如 -L 'MYDATA'    -U 'UUID':以UUID指定要挂载的设备;例如 -U '0c50523c-xxx-a126711d406e'
补充:-o选项后可写的列表    sync:同步模式;    async:异步模式(默认);    atime/noatime:更新访问时间/不更新访问时间。            访问分区文件时,是否更新文件的访问时间,默认为更新(若不更新则文件访问和速率更快)    auto/noauto:自动挂载/手动挂载;是否支持自动挂载(默认自动挂载)            mount- a命令执行时,是否会自动安装/etc/fstab文件内容挂载    exec/noexec:执行/不执行;设定是否允许在文件系统中执行可执行文件(默认是exec允许)    remount:重新挂载已经挂载的文件系统,一般用于指定修改特殊权限    rw/ro:读写/只读,文件系统挂载时,是否具有读写权限(默认rw)    suid/nosuid:具有/不具有;设定文件系统是否具有SUID和SGID的特殊权限(默认是具有)    user/nouser:是否允许普通用户挂载此设备    diratime/nodiratime:目录的访问时间戳    dev/nodev:是否支持在此文件系统上使用设备文件    usrquota:写入代表文件系统支持用户磁盘配额,默认不支持    grpquota:写入代表文件系统支持组磁盘配额,默认不支持    acl:启用此文件系统上的acl功能    defaults:默认,默认-o后面会有这么多选项:rw, suid, dev, exec, auto, nouser, and async
device:指明要挂载的设备;    (1) 设备文件:例如/dev/sda5    (2) 卷标:-L 'LABEL', 例如 -L 'MYDATA'    (3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'    (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfsdir:挂载点    事先存在;建议使用空目录;进程正在使用中的设备无法被卸载;
 

基本示例:基本示例:

点开示例1:挂载设备/dev/vdb1到挂载点/mnt/game下​​​​​​​

准备:    通过前面2章创建一个分区并对分区创建文件系统,这里创建了/dev/vdb1的文件系统    创建挂载点,这里通过mkdir /mnt/game 创建了一个空目录挂载点示例方法:    把/dev/vdb1挂载到/mnt/game;并且设置这个设备为只读操作;挂载时打印当前进行的操作;    并设置挂载是设备文件系统类型;并设置-o选项为不更新访问时间和同步模式;挂载命令:    >> mount -vrt ext2 -o sync,noatime /dev/vdb1 /mnt/game        打印:mount:/dev/vdb1 已挂臷到 /mnt/game。    查看挂载:        >> df -h            文件系统        大小  已用  可用 已用% 挂载点            tmpfs           341M  1.1M  339M    1% /run            /dev/vda2        59G  4.4G   53G    8% /            ....            /dev/vdb1      1007M   28K  956M    1% /mnt/game    校验是否只读挂载:        >> touch /mnt/game/abc.txt            touch: 无法 touch '/mnt/game/abc.txt': 只读文件系统'补充:最常用的方式'    >> mount -v /dev/vdb1 /mnt/game        这样就完成了一个平常最基本的挂载(没有啥乱七八糟的参数,最多一个-v日志)

点开示例1:使用LABEL或UUID当挂载的设备挂载到/mnt/videos下

准备:    通过前面2章创建一个分区并对分区创建文件系统,这里创建了/dev/vdb2的文件系统    创建挂载点,这里通过mkdir /mnt/videos 创建了一个空目录挂载点挂载命令:    查看/dev/vdb2的LABEL值(创建文件系统时可创建LABEL):        >> blkid /dev/vdb*            打印:/dev/vdb2: LABEL="shebeiB" UUID="eaaxxx28e2" ...        >> mount -v -L shebeiB /mnt/videos            打印:mount:/dev/vdb2 已挂臷到 /mnt/videos    使用UUID当挂载的设备:        >> mount -v -U eaab835f-073a-4b98-ba44-68c8e49228e2 /mnt/videos            打印:mount:/dev/vdb2 已挂臷到 /mnt/videos

挂载后的设备可以通过df -h 或 mount -l来查看是否被挂载

(三):卸载设备

  直接将已挂载的文件系统给它卸载掉!卸除之后可以使用df或mount命令看看是否还存在目录树中。

 
语法:    umount [-hV]    umount -a [选项]    umount [选项] <源> | <目录>    参数说明:        -a:自动卸载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)        -f:强制卸除!可用在类似网络文件系统(NFS)无法读取到的情况下        -n:不写更新/etc/mtab情况下卸载        -l:立即断开文件系统,清理以后执行        -R:递归卸载目录及其子对象        -r:若卸载失败,尝试以只读方式重新挂臷        -t:制文件系统集合        -v:打印当前进行的操作        -h:查看帮助文档        -V:查看版本号
注意:    1:先找一下已经挂载的文件系统;umount(卸除)后面接设备或挂载点都可以;    2:卸载时不要再待卸载的目录内,否则无法卸载;若其它人在线则可以通过如下方式解决:        '报错解决:umount: /mnt/game: target is busy.'        查看被占用的目录,并强制解锁这个目录(就是让那个占用的人下线)        假设我有个/mnt/game被占用无法卸载        >> fuser -cu /mnt/game            /mnt/game:   919540c(tom)           >> fuser -k /mnt/game           
使用示例:        >> umount -f /dev/vdb1        >> umount /mnt/game
 

(四):自动挂载设备

  手动处理mount不是很人性化,我们总是需要让系统自动在开机时进行挂载的!这样免得我们每次开机都要挂载一遍;所以这一小节将介绍 /etc/fstab这个文件;我们只需要修改一下/etc/fstab即可,不过在开始前说一些系统挂载的限制:

  • 根目录(/)是必须挂载的,而且一定要先于其它mount point(挂载点)被挂载进来。

  • 其它mount point(挂载点)必须为任意已建立的目录,但一定要遵守必须的系统目录架构原则(FHS)

  • 所有mount point(挂载点)在同一时间之内,只能挂载一次。

  • 所有partition(分区)在同一时间之内,只能挂载一次。.

  • 如若进行卸除,您必须先将工作目录移到mount point(及其子目录)之外。

  查看挂载配置文件cat /etc/fstab的内容

 
具体选项:    <file system>      <mount point>   <type>     <options>      <dump>  <pass>    '[设备、标签、UUID等]   [挂载点]   [文件系统]  [文件系统参数]    [dump]  [fsck]'命令查询(看下面挂载了(/)目录是ext4的):    root@VM-12-4-ubuntu:/mnt    ...     /dev/disk/by-uuid/7bccaefa-b039-4ff6-bd32-22dde0066c0b / ext4 defaults 0 1
 

  其实/etc/fstab(filesystem table)就是将我们利用mount指令进行挂载时的所有选项与参数写入到了这个文件了。除此之外/etc/fstab还加入了dump选项来备份用指令的支持!还有一个fsck选项用来做开机时是否进行文件系统检验功能;这个文件的内容共有六个字段,详细介绍如下:​​​​​​​

'第一栏:磁盘装置文件名、UUID、LABEL name(<file system>)'    这个字段可以填写的数据主要有三种:        1:文件系统或磁盘的设备文件名;如/dev/vda2等        2:文件系统的UUID名称;如UID=xxx        3:文件系统的LABEL名称;如LABEL=xxx    因为每个文件系统都可能有上面的三种参数值,使用哪个都行,    通过修改这个配置文件挂载的话推荐使用UUID,具体的UUID通过blkid查询'第二栏:挂载点(mount point)'    就是一个在根目录里的任意空文件夹,后面需要为这个空文件夹挂载设备。'第三栏:磁盘分区槽内的文件系统(type)'    在手动挂载时可以让系统自动测试挂载,所以不必写mount -t xxx;    但在这个文件中我们必须要手动写入文件系统才行!如下:        1:普通设备挂载:ext2~4/xfs等文件系统类型        2:交换分区swap:swap        3:网络挂载地址linux之间:nfs,windos挂载:cifs        4:光盘 iso9660,文件 cifs'第四栏:文件系统参数(options)'    其实options在上面的mount说过一次,当时使用的是mount -o xx,xx来指定,这里我再总结一下:    1:async/sync(异步/同步)        设定磁盘是否以异步方式运作,默认为async(推荐)    2:auto/noauto(自动挂载/非自动挂载)        当执行mount -a时,此文件系统是否会被主动测试挂载。默认为auto。    3:rw/ro(可读写/可读)        让该分区槽以可读写或者是只读的方式挂载上来,如果要分享的数据是不给用户随意变更的,        这里也能够设定为只读(ro)。这时任何用户都无法修改挂载的设备数据;(默认rw)    4:exec/noexec(可执行/不可执行)        限制此挂载的文件系统内是否可以执行可执行文件工作,如果是纯粹用来储存数据的目录,        那么可以设定为noexec会比较安全。    5:user/nouser(允许/不允许使用者挂载)        代表是否允许用户使用mount指令来挂载,一般我们当然不希望一般身份的user能使用mount,        因为太不安全了,因此这里应该要设定为nouser。    6:suid/nosuid(具有/不具有suid权限)      该文件系统是否允许SUID的存在,若不是执行文件放置的目录,也可以设定为nosuid来取消这个功能。    7:defaults        若是defaults的话就会同时具有rw, suid, dev, exec, auto, nouser, async等参数。'第五栏:能否被dump指令备份(dump)'    dump是一个用来做为备份的指令,不过现在有太多的备份方案了,一般不要理会,直接输入0就行;默认为0'第六栏:是否以fsck检验扇区(pass)'    早期开机的流程中,会有一段时间去检验本机的文件系统,看看文件系统是否完整(clean)。不过这个方式使    用的主要是透过fsck去做的,我们现在用的xfs文件系统就没有办法适用,因为xfs会自己进行检验,不需要    额外进行这个动作,所以直接填0就好了。
 

基本示例:基本示例:​​​​​​​

准备工作:    现在有/dev/vdb1、/dev/vdb2、/dev/vdb3这三个设备到/etc/fstab文件进行配置;配置说明:    /dev/vdb1使用设备路径挂载,挂载到/mnt/game下,并设置自动挂载,并且只可读操作;    /dev/vdb2使用LABEL方式挂载,挂载到/mnt/videos下,并设置自动挂载,并且可读写操作;    /dev/vdb3使用UID方式挂载,挂载到/mnt/music下,并设置不自动挂载,并且可读写操作;开始干活:    # 查询是否被挂载(发现并没有)    >> df -h        文件系统        大小  已用  可用 已用% 挂载点        /dev/vda2        59G  4.5G   52G    8% /        ...        tmpfs           340M  4.0K  340M    1% /run/user/0    # 查看具体的分区槽信息(就是磁盘分区并安装了文件系统)    >> blkid /dev/vdb*    # 修改配置文件(/etc/fstab)    >> vim /etc/fstab        /dev/vdb1    /mnt/game    ext2    auto,ro    0    0        LABEL=shebeiB    /mnt/videos    ext3    auto,rw    0    0        UUID=a14f72f0-d450-473a-aaa2-4f2b811b0500  /mnt/music  ext4  noauto,rw  0  0    '# 重要说明:'        在配置完如上配置后,务必确认当前这几个设备已经被卸载;        还有就是上面的配置一定要核对,若存在错误可能系统无法正常启动。    # 自动挂载(会把我们配置文件为auto的自动挂载上)        >> mount -a        >>  df -h            文件系统        大小  已用  可用 已用% 挂载点            tmpfs           341M  1.1M  339M    1% /run            /dev/vda2        59G  4.5G   52G    8% /            ...            tmpfs           340M  4.0K  340M    1% /run/user/0            /dev/vdb1      1007M   32K  956M    1% /mnt/game            /dev/vdb2       2.0G   92K  1.9G    1% /mnt/videos        # 其中有个vdb3不是auto,所以未被挂载    # 卸载设备并重启查看是否被挂载(后面的测试就是开机了除了vdb3,其它自动挂载)        >> umount /dev/vdb1        >> umount /dev/vdb2
 

图片

(五):其它特殊设备挂载

  上面我们说了常见ext类型的文件系统的挂载,但是遇到一些特殊的设备则如何进行挂载?

1:ISO镜像挂载

 
准备工作:    准备一个.iso的文件和一个挂载点目录/mnt/guazai1,然后开干:开始挂载ISO:    >> mount -vo loop /mnt/geodetic_coordinates.iso  /mnt/guazai1        打印:mount:/dev/loop12 已挂臷到 /mnt/guazai1。    >> df -h        文件系统        大小  已用  可用 已用% 挂载点        tmpfs           388M  1.9M  386M    1% /run        /dev/sda2        20G   11G  8.5G   55% /        ...        /dev/loop12     135M  135M     0  100% /mnt/guazai1        >> ls -l /mnt/guazai1        总计 136741        -r-xr-xr-x 1 root root  1743984  8月 10 12:00  FangQian_4326.smwu        -r-xr-xr-x 1 root root  1744016  8月 10 12:00  FQ_2000.smwu        ...卸载ISO并查看:    >> umount -f /dev/loop12    >> df -h        文件系统        大小  已用  可用 已用% 挂载点        tmpfs           388M  1.9M  386M    1% /run        /dev/sda2        20G   11G  8.5G   55% /        tmpfs           1.9G     0  1.9G    0% /dev/shm        tmpfs           5.0M  8.0K  5.0M    1% /run/lock        tmpfs           388M   64K  387M    1% /run/user/123        tmpfs           388M   48K  387M    1% /run/user/0
 

2:挂载Windows共享文件

  首先我们需要套在Windows上暴露一个共享文件,然后就需要确定Windows和Linux网络是否通畅。

图片

 
基本介绍:    mount -t cifs是一个Linux命令,用于挂载基于CIFS/SMB协议的共享目录。    CIFS(Common Internet File System)是一种在Windows操作系统中使用的文件共享协议,    SMB(Server Message Block)是它的前身,两者基本一致。环境准备好以后开始:    Windows的IP是:192.168.0.144    Windows共享的文件夹://192.168.0.144/images    在Windows共享的用户名称=JavaScript;用户密码=54088    我们想把这个共享文件挂载到/mnt/guazai2(创建:mkdir /mnt/guazai2)挂载共享文件windows分享到linux:    # 使用的文件系统类型为cifs    mount -t cifs -o username=JavaScript,password=54088 //192.168.0.144/images /mnt/guazai2    # 查看挂载信息并卸载Windows共享文件        >> df -h            文件系统                大小  已用  可用 已用% 挂载点            tmpfs                   388M  1.9M  386M    1% /run            /dev/sda2                20G   10G  8.6G   54% /            ...            //192.168.0.144/images  201G  3.5G  197G    2% /mnt/guazai2        >> umount  //192.168.0.144/images

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621621.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业使用合同档案管理系统软件有什么好处

使用合同档案管理系统软件可以带来以下好处&#xff1a; 1. 提高效率&#xff1a;合同管理软件可以自动化合同流程&#xff0c;包括创建、审批、签署和归档等。通过自动化&#xff0c;可以节省大量时间和精力&#xff0c;提高工作效率。 2. 降低风险&#xff1a;玖拓档案合同管…

鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下)

本篇为快锁下篇&#xff0c;说清楚快锁在内核态的实现&#xff0c;解答以下问题&#xff0c;它们在上篇的末尾被提出来。 鸿蒙内核进程池默认上限是64个&#xff0c;除去两个内核进程外&#xff0c;剩下的都归属用户进程&#xff0c;理论上用户进程可以创建很多快锁&#xff0…

YOLOv8小白中的小白安装环境教程!没一个字废话,看一遍不踩坑!

文章目录 去哪里下代码&#xff1f;怎么下代码&#xff1f;怎么装环境&#xff1f;命令行界面(CLI)指令和Python脚本区别&#xff1f;附录1 conda常用指令附录2 git常用指令附录3 项目代码文件作用 去哪里下代码&#xff1f; 下载代码请大家直接去 YOLOv8的官方仓库下载&#…

【性能测试】基础知识篇-并发用户、RPS、TPS的解读

本文介绍并发用户、RPS、TPS的基本概念以及三者之间的关系。 术语定义 并发用户&#xff1a;在性能测试工具中&#xff0c;一般称为虚拟用户&#xff08;Virtual User&#xff0c;简称VU&#xff09;&#xff0c;指的是现实系统中操作业务的用户。 说明 并发用户与注册用户、在…

2025考研 | 北京师范大学计算机考研考情分析

北京师范大学&#xff08;Beijing Normal University&#xff09;简称“北师大”&#xff0c;由中华人民共和国教育部直属&#xff0c;中央直管副部级建制&#xff0c;位列“211工程”、“985工程”&#xff0c;入选国家“双一流”、“珠峰计划”、“2011计划”、“111计划”、…

C++入门-stack和queue(下)

大家好啊&#xff0c;在这先祝天下的母亲节日快乐啦&#xff01;现在呢&#xff0c;给大家带来C中priority_queue和容器适配器的相关知识点 3.1 C 中的优先队列&#xff08;priority_queue&#xff09;介绍 优先队列&#xff08;priority_queue&#xff09;是一种特殊的队列…

LeetCode343:整数拆分

题目描述 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 代码 动态规划 class Solution { public:int integerBreak(int n) {/*dp[i]&#xff1a;表示对…

CANopen总线_CANOpen开源协议栈

CANopen是自动化中使用的嵌入式系统的通信协议栈和设备配置文件规范。就OSI 模型而言&#xff0c;CANopen 实现了以上各层&#xff0c;包括网络层。 CANopen 标准由一个寻址方案、几个小型通信协议和一个由设备配置文件定义的应用层组成。通信协议支持网络管理、设备监控和节点…

【c++】二叉搜索树(BST)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章来到二叉搜索树的内容 目录 1.二叉搜索树的介绍2.二叉搜索树的操作与实现insert插入Find查找InOrder中序遍历Erase删除 3.二叉搜索树的应用&#xff08;K…

代理IP可靠吗?哪里可以找到可靠的代理?

需要代理来访问受限制的网站或改善您的在线隐私&#xff1f;别再犹豫了&#xff01;在这篇博文中&#xff0c;我们将探讨您可以使用的选项&#xff0c;并提供有关在哪里获取代理的指导。 首先&#xff0c;让我们了解什么是代理及其工作原理。代理充当您的设备和互联网之间的中介…

内容与图像一对多问题解决

场景复现 分析&#xff1a; 其实这是两给表&#xff0c;一个内容表&#xff0c;一个图片表&#xff0c;一对多的关系。 解决思路: 1. 先上传图片拿到图片的List集合ids&#xff0c;返回值是集合的ids&#xff0c;给到前端 2. 再添加内容表的数据生成了id&#xff0c;遍历查…

git版本控制器详解(3)本地和远端同步

为什么要使用gitee&#xff1f; gitee是基于git所搭建的网站&#xff0c;会给我们提供一个稳定的服务器保存我们的版本信息。因为github是国外网站&#xff0c;国内访问速度不够稳定&#xff0c;所以我们选择使用gitee。 前边我们讲解了如何在本地进行操作&#xff0c; 接下来进…

Ranger 面试题及答案整理,最新面试题

Ranger 的安全模型是如何设计的&#xff1f; Ranger的安全模型设计主要基于访问控制和安全策略的管理&#xff0c;它通过以下几个关键组件实现&#xff1a; 1、策略管理&#xff1a; Ranger 提供了一个中央管理平台&#xff0c;用于定义、更新和管理安全策略。这些策略根据资…

【小白入门篇6】常识|怎么计算模型需要的资源

01 背景 各个公司相继推出大模型, 有开源和不开源,有些技术爱好者也开始心痒难耐&#xff0c;萌生了私有本地模型,甚至有伙伴构建大模型并进行训练的想法, 大模型不仅比拼技术, 也是比拼爹(资源)的存在, 我个人在实战经历经常问自己,到底需要什么样配置才能跑起来这个模型, 完…

Mysql数据类型设计思考

一、Mysql数据类型设计规范 1.1 选择更小的数据类型 一般情况下&#xff0c;在满足存储要求的基础上&#xff0c;尽量选择小的存储类型。例如&#xff1a;存储0~200&#xff0c;tinyint和bigint都可以存储&#xff0c;那么选择tinyint。原因&#xff1a;越小的数据类型运算速…

【项目】Boost搜索引擎

项目相关背景 现在市面上已经出现很多搜索引擎&#xff0c;比如&#xff1a;百度、Google、Bing等等&#xff0c;它们都是全网性搜索 而我做得项目就像cplusplus网站中搜索C的相关知识一样&#xff0c;同样做的是站内搜索&#xff0c;它的搜索更垂直。 搜索引擎的宏观原理 ser…

模型 洋葱模型(组织管理方向)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。层层深入&#xff0c;探索核心。 1 洋葱模型的应用 1.1 洋葱模型用于职业规划 有一个名叫李明的大学生&#xff0c;他最近感到迷茫和压力&#xff0c;因为他即将毕业并面临职业选择。李明决定寻求心…

Java中55种锁,高级面试题,最新面试题

Java中乐观锁在实际应用中如何解决并发问题&#xff1f; 乐观锁通过假设并发冲突发生概率较低来解决并发问题&#xff0c;主要通过数据版本控制实现。在更新数据前&#xff0c;会检查数据版本是否发生变化&#xff0c;只有在数据版本未变时才允许更新&#xff0c;这样可以避免…

uos server 无法通过ssh工具连接

问题现象 uos server 服务器操作系统 在虚拟机中安装好之后&#xff0c;防火墙已经关闭&#xff0c;ssh服务已经启动&#xff0c;但通过finalshell等ssh工具连接报错 &#xff1a;java.net.ConnectException: Connection timed out: connect 经过确认 防火墙已关&#xff0c;s…

计算机毕业设计springboot体育馆场地预约管理系统【附源码】

计算机毕业设计springboot体育馆场地预约管理系统[附源码] &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制…