• 硬链接和软连接


    7.5 硬链接和软链接:

    Linux链接分两种:

    • 1、一种被称为硬链接(Hard Link)
    【硬连接】:硬连接指通过索引节点号来进行连接。inode是可以对应多个文件名的
    #扩展阅读
    inode信息中有一项叫做”链接数”,记录指向该inode的文件名总数,这时就会增加1。反过来,删 除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
    这里顺便说一下目录文件的”链接数”。创建目录时,默认会生成两个目录项:和前者的 inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inod e号码就是当前目 录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等 于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的"硬链接”和当前目录下的硬链接"。
    

    • 2、另一种被称为软链接,即符号链接(Symbolic Link)
    软链接文件有类似于Window s的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上 是一个文本文件,其中包含的有另一文件的位置信息。
    如下图所示
    文件2和文件1的inod e号码虽然不一样,但是文件2的内容是文件1的路径。读取文件2时,系统会自 动将访问者导向文件1。因此,无论打开哪一个文件,最终读取的都是文件1。这时,文件2就称为文 件1的"软链接"(soft link)或者''符号链接(symbolic link)。
    这意味着,文件2依赖于文件1而存在,如果删除了文件1,打开文件2就会报错:"No such file or directory'o这是软链接与硬链接最大的不同:文件2指向文件1的路径,而不是文件1的inode号码,文件1的inode”链接数"不会因此发生变化。
    

    硬链接知识点提炼:

    0.对硬链文件内容进行修改,会影响到所有文件名;
    1.硬链接文件与源文件具有相同inode的不同文件名:一个文件只能有一个inode号,但多个文件的inode号可以相同
    2.删除硬链接或者原文件之一,不影响另一个文件名的访问,除非所有的都删除掉,所以硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止"误删”的功能。
    3.删除所有硬链接,数据会在被磁盘检查或者新数据写入时候删除回收。
    4.通过ln [原文件][目标文件]设置硬链接
    5.通过rm -f删除硬链接
    6.目录不可创建硬链接,并且硬链接无法跨区
    
    # 示例
    命令# touch small_egon .txt
    命令# ln small_egon.txt big_egon.txt
    命令# ls -i small_egon.txt
    l7696460 small_egon.txt
    命令# ls -i big_egon.txt
    l7696460 big_egon.txt
    命令#  ll  small_egon.txt	# 两个硬链接文件的硬链接数均为2
    -rw-r--r-- 2 root root 0 l2 月 l6 l7:05 small egon .txt
    命令#  ll  big_egon.txt	# 两个硬链接文件的硬链接数均为2
    -rw-r--r-- 2 root root 0 l2 月 l6 l7:05 big_egon.txt
    

    软链接知识提炼:

    #0. 对软链的源文件或目标文件内容进行修改, 会影响到所有文件名;
    #l. 软链接文件与源文件具有不同的inode号
    #2. 删除软连接文件的源文件, 软链接文件将无法使用, 软链接作用
    -l .软件升级
    -2 .企业代码发布
    -3 .不方便目录移动
    #3. 删除源文件后, 软连接文件无效, 应该也一起删除掉, 以便回收
    #4. 执行ln —s [ 原文件] [ 目标文件]创建软链接
    #5. rm —f 删除软链接
    #6、可以对目录创建软链接, 并且软连接可以跨分区
    
    命令# touch l.txt
    命令# ln -s l.txt 2.txt 
    命令# ls -i  l.txt 
    l7696462 l.txt
    命令# ls -i 2.txt
    l7696463 2.txt
    命令#  ll l.txt	# 两个软链接文件的硬链接数均为l
    -rw-r--r-- l root root 0 l2 月 l6 l7:26 l.txt
    命令#  ll 2.txt	# 两个软链接文件的硬链接数均为l
    lrwxrwxrwx  l root root 5 l2 月 l6 l7:26 2.txt -> l.txt
    命令#  rm -rf l.txt   # 删掉l.txt, 会发现2.txt不可用
    命令# ll 2.txt
    lrwxrwxrwx  l root root 5 l2 月 l6 l7:26 2.txt -> l.txt
    命令# mkdir /dirl
    命令# ln /dirl /dir2 
    ln: " /dirl ": 不允许将硬链接指向目录
    命令# ln -s /dirl / /dir2
    

    7.6实战应用:

    磁盘有空间但创建不了文件
    实战场景:在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时, 系统提示磁盘空间不足, 用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了80%, 还有1.9G的剩余空间, 但是无法创建新的文件。当时使用的是root用户。服务器没有被黑。
    [rootmxxx ~]# df -h
    文件系统	     容量已用	可用	  已用8	   挂载点
    /dev/sda3     l0G	8 .0G	  l .9G	     80%/
    
    常识: 只要权限够, 磁盘上有空间一定可以创建文件。这个是错的。
    
    排查:
    [root@xxx ~]# df -i
    文件系统      Inode      已用(I) 可用(I)   已用(I)%   挂载点
    /dev/sda3    5242880      0      52428800     100%/
    
    后来用df-i查看了一下/data所在的分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
    查找原因: /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
    解决方案1:删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
    解决方案2:在/data备份好一些文件,然后删除这些文件,释放一些inode,然后创建一个文件夹/data/cache2。在cache2下挂载一个新分区:sda4,下次写数据需要写到新分区cache2目录下。
    
    命令# mkfs.xfs /dev/sdb
    meta-data=/dev/sdb	isize=512     agcount=4, agsize=1310720 blks 
            =	       sectsz=512     attr=2, projid32bit=1 
            =	          crc=1       finobt=0, sparse=0 
    data	=	        bsize=4096    blocks=5242880,imaxpct=25 
            =	        sunit=0       swidth=blocks=5242880
    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
    命令# mkdir /data/cache2
    命令# mount /dev/sdb /data/cache2/
    
    ps:inode分区完后,不可以增加inode数量,改变inode大小
    

    其他场景:

    1.大量的小文件问题:可能会使inode耗尽,使得文件文法创建。(磁盘利用率低)--->对于小文件比较多的场景,将block划分小一点。
    2.大文件问题:一个文件占用多个block,使得文件读写速率慢。----> 将block划分大一点。3.ext文件系统——xfs文件系统
    

    Linux中软链接和硬链接的区别:

    1.从定义:linux系统中,链接有两种,一种被称为软链接,类似于快捷方式,存放指向原文件inode的 信息,与原文件inode不同。一种是硬链接,与原文件有相同的inode,可以指向数据block。
    2.从创建方式:硬链接命令In[原文件][目标文件],软链接命令In -s[原文件][目标文件]
    3.从创建对象:In命令不能对目录创建硬链接,但是可以对目录创建软链接。因为软链接可以跨越文件 系统,硬链接则不能。对目录和为客户创建的文件软链接经常用到。
    4.删除软链接文件,对硬链接和原文件无影响。
    5.删除文件硬链接,对原文件及软链接文件无影响
    6.删除原文件,对硬链接读取数据无影响,软链接则失效。会出现红底白字状。
    7.同时删除原文件和硬链接,原文件才会被真正删除
    8.很多硬件设备中的快照原理,类似于硬链接原理
    
  • 相关阅读:
    成都Uber优步司机奖励政策(3月8日)
    北京Uber优步司机奖励政策(3月8日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月8日)
    hadoop包含哪些技术?
    hadoop命令详解
    hadoop Shell命令详解
    hadoop hdfs uri详解
    Android Activity/Service/Broadcaster三大组件之间互相调用
    Service实时向Activity传递数据案例
    Android Service获取当前位置(GPS+基站)
  • 原文地址:https://www.cnblogs.com/qiukangle/p/13956394.html
Copyright © 2020-2023  润新知