云计算实战系列九(存储管理II)

存储管理Ⅱ

  • 逻辑卷的创建
  • lvm在线扩容
  • lvm缩容、删除lv(课下作业)
  • swap交换分区
  • 文件系统修复
  • mount命令详解
  • 链接文件

一、逻辑卷LVM

LVM管理

 

 

理论:
LVM:逻辑分区管理
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个 逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩 展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定 不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。 LE(logical extent):逻辑卷也被划分为被称为LE,逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小 取决于逻辑卷所在卷组中的物理区域的大小。

1.创建LVM

准备物理磁盘 可以是: /dev/sdb /dev/sdc1

[root@newrain ~]# ll /dev/sd{b..d}
brw-rw---- 1 root disk 8, 16 Aug  5 21:22 /dev/sdb
brw-rw---- 1 root disk 8, 32 Aug  5 21:22 /dev/sdc
brw-rw---- 1 root disk 8, 48 Aug  5 21:22 /dev/sdd

1.1.创建.pv(物理卷)

[root@newrain ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@newrain ~]# pvscan
  PV /dev/sdb                       lvm2 [10.00 GiB]
  Total: 2 [<19.00 GiB] / in use: 1 [<9.00 GiB] / in no VG: 1 [10.00 GiB]
[root@newrain ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sda2  centos lvm2 a--  <9.00g     0 
  /dev/sdb          lvm2 ---  10.00g 10.00g
[root@newrain ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               vg0
  PV Size               10.00 GiB / not usable 16.00 MiB
  Allocatable           yes 
  PE Size               16.00 MiB
  Total PE              639
  Free PE               597
  Allocated PE          42
  PV UUID               TmVLP4-jCIO-O3P3-CEQX-2ee1-4bP8-S1oJuc

1.2.创建vg(卷组)

[root@newrain ~]# vgcreate vg0 -s 16 /dev/sdb
  Volume group "vg0" successfully created
[root@newrain ~]# vgscan
  Reading volume groups from cache.
  Found volume group "vg0" using metadata type lvm2
[root@newrain ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  vg0      1   0   0 wz--n- <10.00g <10.00g
[root@newrain ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               16.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               ldk7py-bfmT-j4XK-X1OU-GWV8-b5QW-KrjB1i

1.3.创建lv(逻辑卷)

[root@newrain ~]# lvcreate -l 10 -n lv0 vg0
  Logical volume "lv0" created.
[root@newrain ~]# lvcreate -L 500M -n lv1 vg0
  Rounding up size to full physical extent 512.00 MiB
  Logical volume "lv1" created.
[root@newrain ~]# lvscan
  ACTIVE            '/dev/vg0/lv0' [160.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [512.00 MiB] inherit
[root@newrain ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao----  <8.00g                                                    
  swap centos -wi-ao----   1.00g                                                    
  lv0  vg0    -wi-a----- 160.00m                                                    
  lv1  vg0    -wi-a----- 512.00m  
  [root@newrain ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                UPc9Si-aUs2-nhwx-5ZP8-F2hl-PwSR-Z7piVL
  LV Write Access        read/write
  LV Creation host, time newrain, 2019-08-05 21:33:30 -0400
  LV Status              available
  # open                 0
  LV Size                160.00 MiB
  Current LE             10
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/vg0/lv1
  LV Name                lv1
  VG Name                vg0
  LV UUID                MQTv6D-HUut-V1cc-gFwh-awYx-TOQm-5ayzKw
  LV Write Access        read/write
  LV Creation host, time newrain, 2019-08-05 21:34:05 -0400
  LV Status              available
  # open                 0
  LV Size                512.00 MiB
  Current LE             32
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

1.4.创建文件系统并挂载

[root@newrain ~]# mkfs.xfs /dev/vg0/lv0
[root@newrain ~]# mkfs.ext4 /dev/vg0/lv1

[root@newrain ~]# mkdir /mnt/lv0 /mnt/lv1

[root@newrain ~]# vim /etc/fstab
/dev/vg0/lv0    /mnt/lv0        xfs     defaults 0 0
/dev/vg0/lv1    /mnt/lv1        ext4    defaults 0 0

[root@newrain ~]# mount -a
[root@newrain ~]# df
Filesystem          1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg0-lv0        160420    8416    152004   6% /mnt/lv0
/dev/mapper/vg0-lv1        499656     780    462180   1% /mnt/lv1

2.扩容

2.1.扩大VG vgextend

[root@newrain ~]# pvcreate /dev/sdc   #将另一块盘创建为物理卷
  Physical volume "/dev/sdc" successfully created.
[root@newrain ~]# vgextend vg0 /dev/sdc #卷组扩容
  Volume group "vg0" successfully extended
[root@newrain ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  vg0      2   2   0 wz--n- <19.97g 19.31g
[root@newrain ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sdb   vg0    lvm2 a--   9.98g <9.33g
  /dev/sdc   vg0    lvm2 a--   9.98g  9.98g

http://2.2.LV扩容

[root@newrain ~]# lvextend -L +2G /dev/vg0/lv0
  Size of logical volume vg0/lv0 changed from 160.00 MiB (10 extents) to <2.16 GiB (138 extents).
  Logical volume vg0/lv0 successfully resized.

[root@newrain ~]# lvextend -l +20 /dev/vg0/lv1
  Size of logical volume vg0/lv1 changed from 512.00 MiB (32 extents) to 832.00 MiB (52 extents).
  Logical volume vg0/lv1 successfully resized.
[root@newrain ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert                                                   
  lv0  vg0    -wi-ao----  <2.16g                                                    
  lv1  vg0    -wi-ao---- 832.00m

FS扩容

[root@newrain ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0     xfs       157M  8.3M  149M   6% /mnt/lv0
/dev/mapper/vg0-lv1     ext4      488M   35M  419M   8% /mnt/lv1

#xfs 文件系统扩容
[root@newrain ~]# xfs_growfs /dev/vg0/lv0 
#ext2/3/4  文件系统扩容
[root@newrain ~]# resize2fs  /dev/vg0/lv1

[root@newrain ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0     xfs       2.2G   11M  2.2G   1% /mnt/lv0
/dev/mapper/vg0-lv1     ext4      802M   35M  719M   5% /mnt/lv1

二.交换分区

交换分区管理 Swap

作用: ‘提升‘ 内存的容量,防止OOM(Out Of Memory)

一、查看当前的交换分区

[root@newrain ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972          94         662           7         216         707
Swap:             0           0           0

[root@newrain ~]# swapon -s  #检测交换分区使用情况

二、增加交换分区 可以是基本分区,LVM,File

准备分区

[root@newrain ~]#  fdisk /dev/sdb
[root@newrain ~]#  partprobe /dev/sdb 

[root@newrain ~]# ll /dev/sdd*
brw-rw---- 1 root disk 8, 48 Aug  5 22:54 /dev/sdd
brw-rw---- 1 root disk 8, 49 Aug  5 22:54 /dev/sdd1

初始化

[root@newrain ~]# mkswap /dev/sdd1
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=1def6dd0-78dd-41c2-bce1-1ec239a4ab20
[root@newrain ~]# blkid /dev/sdd1
/dev/sdd1: UUID="1def6dd0-78dd-41c2-bce1-1ec239a4ab20" TYPE="swap" 
[root@newrain ~]# vim /etc/fstab
UUID="1def6dd0-78dd-41c2-bce1-1ec239a4ab20" swap swap defaults 0 0
[root@newrain ~]# swapon -a  (读取/etc/fstab)
[root@newrain ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sdd1                               partition       1048572 0       -3
[root@newrain ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0     xfs       2.2G   11M  2.2G   1% /mnt/lv0
/dev/mapper/vg0-lv1     ext4      802M   35M  719M   5% /mnt/lv1
[root@newrain ~]# cd /mnt/lv0
[root@newrain lv0]# 


[root@newrain lv0]# dd if=/dev/zero of=./swap2.img bs=1M count=512
或者
[root@newrain lv0]# dd </dev/zero >./swap2.img bs=1M count=512
[root@newrain lv0]# mkswap ./swap2.img 
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=120975d5-f20a-46be-be88-8d1f030d52f1
[root@newrain lv0]# vim /etc/fstab
/mnt/lv0/swap2.img swap swap defaults 0 0
[root@newrain lv0]# swapon -a
swapon: /mnt/lv0/swap2.img: insecure permissions 0644, 0600 suggested.
[root@newrain lv0]# chmod 600 ./swap2.img 
[root@newrain lv0]# swapon -a
[root@newrain lv0]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sdd1                               partition       1048572 0       -3
/mnt/lv0/swap2.img                      file    524284  0       -4

三.Ext文件系统

EXT2/3/4文件系统** 索引式文件系统

 

 

Ext3/Ext4文件系统基本结构

 

 

• superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式等;

• inode:记录文件的属性(文件的元数据metadata),一个文件占用一个inode,同时记录此文件数据所在的block number;

• block:实际存储文件的內容,若文件太大时,会占用多个block。

Superblock 沒有Superblock ,就沒有filesystem

• block 与 inode 的总量;

• 未使用与已使用的 inode / block 数量;

• block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128bytes 或 256bytes);

• filesystem 的挂载时间、最近一次写入数据的时间、最近一次检查 (fsck) 的时间等文件系统相关信息;

• 每个block group 都可能含有 superblock,这样可以进行用于 superblock 的修复;

data block: 存储文件的实际数据

查看文件系统的信息

dumpe2fs

[root@newrain ~]# dumpe2fs /dev/vg0/lv1
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          /mnt/lv1
Filesystem UUID:          3ea460d1-73e1-4155-a42d-a13eee5ca674
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              57344
Block count:              212992
Reserved block count:     9829
Free blocks:              205032
Free inodes:              57333
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      63
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Aug  5 21:37:17 2019
Last mount time:          Mon Aug  5 21:38:39 2019
Last write time:          Mon Aug  5 23:29:52 2019
Mount count:              1
Maximum mount count:      -1
Last checked:             Mon Aug  5 21:37:17 2019
Check interval:           0 (<none>)
Lifetime writes:          16 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      34c7c2ed-c0b3-4678-88d8-bd7fae48f2d2
Journal backup:           inode blocks
Journal features:         journal_64bit
Journal size:             16M
Journal length:           4096
Journal sequence:         0x00000008
Journal start:            0


[root@newrain ~]# tune2fs -l /dev/vg0/lv1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          /mnt/lv1
Filesystem UUID:          3ea460d1-73e1-4155-a42d-a13eee5ca674
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              57344
Block count:              212992
Reserved block count:     9829
Free blocks:              205032
Free inodes:              57333
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      63
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Aug  5 21:37:17 2019
Last mount time:          Mon Aug  5 21:38:39 2019
Last write time:          Mon Aug  5 23:29:52 2019
Mount count:              1
Maximum mount count:      -1
Last checked:             Mon Aug  5 21:37:17 2019
Check interval:           0 (<none>)
Lifetime writes:          16 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      34c7c2ed-c0b3-4678-88d8-bd7fae48f2d2
Journal backup:           inode blocks

修复文件系统 fsck,e2fsck -fy

案例1: 系统无法正常启动

 

 

 

 

案例二:Read-only file system

如果运行中的服务器的某一个分区出现readonly,导致进程无法写这个分区(比如nginx进程无法写日志文件到此分区, 手动测试touch文件到此分区也显示:cannot touch ‘xxxxx’:Read-only file system),该怎么办?

解决:磁盘read-only的原因一般有2种,一种是没有正常关机导致,还有一种是硬盘故障导致。 如果是/分区,这种情况只能下线报修磁盘了。 如果是其它分区,则可以尝试三步解决此问题:

1.先卸载此分区

2.再fsck.ext4 -fy /dev/sdb1

3.最后挂载此分区,检查是否可以正常读写。

注:以上操作过程,请保证服务器不在线上提供服务

案例三:修复superblock

找到备份的superblock

[root@newrain ~]# dumpe2fs -h /dev/datavg/lv1 |grep 'Blocks per group'

dumpe2fs 1.42.9 (28-Dec-2013) 

Blocks per group:         8192  

利用备份的 superblock恢复superblock

 [root@newrain ~]# fsck.ext4 -b 8192 /dev/datavg/lv1

3.1.XFS文件系统

• 数据区 (data section) 数据区就跟之前了解到的 ext 家族一样,包括 inode/data block/superblock 等信息,都放在该区块。

• 文件系统日志区 (log section)

• 实时运行区 (realtime section)

 

 

修复 XFS 文件系统 xfs_repair

  • ```shell [root@newrain ~]# xfs_repair /dev/vda1 xfs_repair: /dev/vda1 contains a mounted filesystem xfs_repair: /dev/vda1 contains a mounted and writable filesystem fatal error -- couldn't initialize XFS library
    [root@newrain ~]# umount /dev/vda1 [root@newrain ~]# xfs_repair /dev/vda1 Phase 1 - find and verify superblock... Phase 2 - using internal log
    • zero log...
    • scan filesystem freespace and inode maps...
    • found root inode chunk6F6E6963 ```

3.2.FAT文件系统

 

 

FTA 文件系统没有 inode,所以FAT没有将文件所有的block在一开始就读取出来。每个block number记录在前一个block中, 如果一个文件写入的block过于分散,则读取速度非常慢。可以通过碎片整理的方式将分散的block尽量整理到一起。

创建文件系统vfat

[root@newrain ~]# mkfs.vfat /dev/vda6

四.mount详解

常用挂载选项详解

挂载设备文件、卷标、UUID

ISO文件创建及挂载

挂载选项 -t 文件系统类型 -o 选项1,选项2...

示例: mount -t ext4 -o acl /dev/sdb1 /mnt/disk1

文件系统类型:vfat,ext4,xfs,nfs,cifs,iso9660,loop

例1:exec/noexec

[root@newrain ~]# mount /dev/vg01/lv01 /mnt/lv01
[root@newrain ~]# mount -o noexec /dev/vg01/lv02 /mnt/lv02
[root@newrain ~]# cp -rf /bin/date /mnt/lv01
[root@newrain ~]# cp -rf /bin/date /mnt/lv02
[root@newrain ~]# /mnt/lv01/date 
Fri Jan 10 10:40:21 CST 2019
[root@newrain ~]# /mnt/lv02/date 
-bash: /mnt/lv02/date: Permission denied
[root@newrain ~]# mount
/dev/mapper/vg01-lv01 on /mnt/lv01 type ext4 (rw)
/dev/mapper/vg01-lv02 on /mnt/lv02 type ext4 (rw,noexec)

没有指定任何选项,则为默认选项 man mount defaults                 Use default options: rw, suid, dev, exec, auto, nouser, and async.

常见的挂载选项

rw 读写

ro 只读

suid 支持suid

dev 支持设备文件

nodev 不支持设备文件

noexec 不允许执行二进制文件

exec 允许执行二进制文件

auto mount -a 开机自动挂载

noauto mount -a 开机不自动挂载

async 异步写入

sync 同步同入

usrquota 支持用户级磁盘配额功能

grpquota 支持组级磁盘配额功能

acl 支持facl功能

remount 在线重新挂载

pri 指定优先级

==================================================

Relatime 驱动器访问优化

POSIX 标准要求操作系统维护记录每个文件最后一次被访问的文件系统元数据。这个时间戳被称为atime, 维护它需要一个重复的对存储的写入操作。这些写入操作让存储是设备及其连接保持忙碌和通电状态。因 为很少应用程序会使用 atim e 数据,所以这个存储设备活动是在浪费电力。特别是即使没有从存储中读取 该文件也会发生写入存储的事件,但是从缓冲中写入。有时,Linux 内核还支持 mount 的 noatime选项,并 不在使用此选项挂载的文件系统中写入 atime。但是只是关闭这个特性是有问题的,因为有些应用程序会依 赖 atime 数据,并在此数据不可用时失败。

红帽企业版 Linux 6 使用的内核之后此另一个可替换选项 -relatime。Relatime 维护 atime数据,但不是 每次访问该文件时都更改。启用这个选项,则只在上次更新 atime(mtime)后修改该文件时,或者最后一次 访问该文件是在相当长一段时间前(默认为一天)时才会将 atime 数据写入磁盘。 默认情况下,所有现在挂载的文件系统都启用 relatime。要在整个系统中限制这个特性,请使用 boot 参 数 default_relatime=0。如果默认在某个系统中启用 relatime,您可以通过使用选项 norelatime 挂载某个系统来限制它在某个具体文件系统中的使用。最后,要使系统更新文件的 atime 数据的默认周期 有所不同,请使用 relatime_interval= 引导参数,以秒为单位指定周期。默认值为 86400

注:RHEL6开始relatime,atime延迟修改,必须满足其中一个条件:

  1. 自上次atime修改后,已达到86400秒;
  2. 发生写操作时;

例2:async,sync

[root@newrain ~]# mount /dev/vg01/lv01  /mnt/lv01
[root@newrain ~]# mount -o sync /dev/vg01/lv02 /mnt/lv02
[root@newrain ~]# mount
/dev/mapper/vg01-lv01 on /mnt/lv01 type ext4 (rw)
/dev/mapper/vg01-lv02 on /mnt/lv02 type ext4 (rw,sync)
[root@newrain ~]# time cp -rf /etc /mnt/lv01
[root@newrain ~]# time cp -rf /etc /mnt/lv02

挂载时可以使用(针对基本分区)

​ 卷标 LABEL=yang

UUID UUID="353a34b8-9233-465c-b7cf-92c8d308c05b"

UDEV 可以给设备建立一个别名

例3:使用卷标挂载

[root@localhost ~]# tune2fs -l /dev/vda1 |less

 Filesystem volume name:   <none>

[root@newrain ~]# tune2fs -L yang /dev/sda3         //设置卷标LABEL 
tune2fs 1.39 (29-May-2006)

[root@newrain ~]# vim /etc/fstab 
LABEL=yang               /mnt/disk1           ext4    defaults        0 0%

例4:使用UUID挂载

[root@newrain ~]# blkid /dev/sda5

 /dev/sda5: UUID="353a34b8-9233-465c-b7cf-92c8d308c05b" SEC_TYPE="ext2" TYPE="ext3"

  [root@newrain ~]# vim /etc/fstab UUID="353a34b8-9233-465c-b7cf-92c8d308c05b"  /mnt/disk1   ext4  defaults   0 0

挂载ISO文件

  1. ```shell
    1. 将光盘制作成iso [root@newrain ~]# dd if=/dev/cdrom of=/centos7u3.iso [root@newrain ~]# dd /centos7u3.iso
    2. 将文件制作成iso,例如将/etc制作成etc.iso [root@newrain ~]# genisoimage -o /tmp/etc.iso -r /etc [root@newrain ~]# file /tmp/etc.iso /var/etc.iso: ISO 9660 CD-ROM filesystem data 'CDROM '
    3. 使用iso,挂载 [root@newrain ~]# mount -t iso9660 -o loop /tmp/etc.iso /mnt/iso/l ```

五.链接文件

软链接 或 符号链接 硬链接

5.1.符号链接 symbolic link

[root@newrain ~]# echo 111 > /file1
[root@newrain ~]# ln -s /file1 /home/file11
[root@newrain ~]# ll /home/file11 
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1

[root@newrain ~]# ll -i /file1 /home/file11 
4599081 -rw-r--r-- 1 root root 4 Dec 20 17:57 /file1
    135 lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1

[root@newrain ~]# cat /file1 
111
[root@newrain ~]# cat /home/file11 
111
[root@newrain ~]# rm -rf /file1 
[root@newrain ~]# ll /home/file11 
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1

5.2.硬链接

[root@newrain ~]# echo 222 > /file2
[root@newrain ~]# ln /file2 /file2-h1
[root@newrain ~]# ln /file2 /home/file2-h2
ln: failed to create hard link ‘/home/file2-h2’ => ‘/file2’: Invalid cross-device link
[root@newrain ~]# ln /file2 /etc/file2-h3
[root@newrain ~]# ll -i /file2 /file2-h1 /etc/file2-h3  
 4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /etc/file2-h3
 4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /file2
 4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /file2-h1

把一些重要文件做多个链接

注:硬链接 1. 不能跨文件系统(分区) 2. 不支持目录做硬链接

警告:删除目录软链时;

mkdir /home/it1000

touch /home/it1000/file{1..10}

ln -s /home/it1000/ /var/

rm -rf /var/it1000/ 删除目录下的文件

rm -rf /var/it1000 仅删除链接文件本身

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值