新人下载app,立即提现现金 您的好友 送你现金 去提现

NAS服务器之软链接、硬链接之初探

怂系青年 03-16 13:10 关注

创作立场声明:​这次完全是一个linux小白对软硬链接文件技术的一个探索,理论水平不高,很多都是网上现学现卖的东西,请各位大佬海涵,不足之处欢迎各位大佬批评指正,但还是请口下留情。

【写作说明】:本文非教程性文章,仅为作者在学习过程中的简单记录。希望可以通过文章的发布给值友提供一些参考,同时也欢迎值友提供更优的解决方案。文章可能附图不多,多为理论性的阐述,如果感兴趣,请耐心阅读。

需求背景

尝试使用NAS系统有了一段时间,和很多用NAS的朋友一样,起初的设想是将NAS作为家庭媒体服务器,于是注册了很多不可描述的资源下载站,下载了N多T的影视等资源,之后又在NAS建立了plex、emby、jellyfin等媒体服务器,配合tmm进行媒体文件的本地管理(特别是媒体文件的更名整理功能),方便平时家里的使用(媒体服务器等不是今天的重点,简单一提而已)。

ps:在第一稿的时候我尝试用文字来表述自己的需求和遇到的问题,但是发现要写很多文字,而且絮絮叨叨的也不怎么说的清楚,于是决定还是以简单的方式来表述。

需求:

1、使用tr(transmission)下载器下载某T网站上的资源,同时保种(保种时好像不能修改已下载文件的文件名,否则可能导致保种不成功)

2、使用tmm软件对需要纳入媒体资源库的媒体文件进行分文件夹更名保存,这里有点强迫症(如中文文件名等,tmm有这个功能,可以按影片自动建立文件夹,并将对应的nfo文件、海报图片等保存到相应的文件夹中)

图片引用自@阿文菌 的文章图片引用自@阿文菌 的文章

3、tr下载的资源类型很多,并不是都需要纳入媒体库进行播放(某T网站有些时候类似于网络游戏,需要下载一些没用的资源进行混上传“打怪升级”),当然也可以在tr等下载软件中通过分文件夹保存的方法解决,但是因为有第2点(使用tmm进行媒体文件更名保存)的需求,所以分文件夹保存也不太可行

4、有些下载时间比较久,没有必要再进行保种,需要删除以释放硬盘空间,但是这些资源又需要我们在媒体库中留存收藏(比如一些比较经典的影片,系列电影等,我个人是喜欢收藏起来,没事的时候可以翻出来再看看,但是一直保种没人下,也是硬盘资源的一种浪费)

综上,我个人的需求是,保种文件和媒体库文件需要相对独立的保存,但是又互不影响,同时又想尽量的节省硬盘空间。

题外话:某T下载资源的保种可以使用某些工具实现同一份文件,多网站上传,俗称辅种。

我之前的做法是:

下载的文件内容结构保留不动,需要纳入媒体库的资源另外复制一份到媒体服务器映射的文件夹中。

这样做的好处可以实现保种文件和媒体库文件相对独立,而不足就是某些纳入媒体库的文件和保种文件需要占用2倍的硬盘空间。在早期媒体库较小,片源不多的情况下此方法尚可,但当媒体库较大时,2倍的占用空间直接导致了存储成本的上升,所以急需要找到一种解决方法。通过网友的介绍,linux系统自支持的软连接和硬链接可以实现一份存储空间,多文件名关联的功能。下面简单介绍下软连接和硬链接的知识。

硬链接和软链接的理论知识

简单来说:

硬链接

就是多个文件名具有相同的inode,指向硬盘中同一个文件,简单理解就是一个文件具有多个文件名。(这个和windows中文件和文件名的对应关系有点不同,理解上可能有点麻烦,可以参考我下面提供的文章了解下。我试着解释下,linux下的文件实际指的是硬盘上的数据,而文件名则是文件。一个数据可以有多个文件名即有多个文件指向这个数据,修改任意一个文件名的文件其实都是对数据进行了改动,类似于文件同步功能)

注意:原则上硬链接只能对文件实现,不能对文件夹实现。也就是说硬链接只能链接单个文件。

删除文件:1个数据如果硬链接了多个文件(名),需要把这多个文件都删除才能实现删除数据的目的。这个好处就在于,如果我们下载的文件为A,我们在媒体库中硬链接了文件B,那么如果我们后期没有保种需要,通过tr等下载程序删除A,但是数据并没有删除,媒体库中的文件B仍然可以使用。

软连接

可以理解为windows下文件的快捷方式,其中只包含了数据原始对应文件的路径,修改软连接文件不能对数据进行修改。

删除文件:如果我们下载的文件为A,我们在媒体库中软链接了文件B,那么B只是指向了文件A,如果我们删除文件B,其实只是删除了快捷方式,对硬盘上的数据没有影响。而如果我们后期没有保种需要,通过tr等下载程序删除A,那么数据也就被删除了,文件B也就失效了。这种方式不适合我的需求。

如想详细了解的话,可以自行百度,我之前看的下面这篇文章,感觉说的还算比较易懂。

硬链接的实现

通过这两天的摸索,大致掌握了3种方法

1、linux自带命令的实现

linux自带硬链接命令

ln [源文件] [新文件]

因为这种方式是用命令行实现,一次只能实现一个文件的链接,而且我们平时的文件路径又很长,所以仅做了解即可,出于效率的考虑,不做推荐。

2、winscp的实现

在贴吧看到有网友说对于NAS系统来说,使用winscp软件(一般用NAS系统的朋友应该都知道这个工具吧,就是用来远程管理NAS文件系统的软件),通过File(s) > New > Link. Add link/shortcut 确实可以实现硬链接。但是,和命令行一样,每次只能实现一个文件的硬链接,而且如果要异文件夹生成硬链接文件,还是要输入完整路径,操作不是特别方便,也不做推荐。

想了解的朋友可以参考以下两个链接的方法(官方说明,E文版,中文版的说明书比较简单,没有看到这个方面的说明)

3、Link Shell Extension软件的实现

这个软件可能是我很久之前探索硬链接的时候安装的,昨天试了一下,比较好用。先简单贴一下软件的介绍

引用自百度搜索到的软件下载站点介绍:Link Shell Extension 是一个可以在 NTFS 文件系统中创建“硬连接”的 Windows 资源管理器扩展。 “硬连接”让一个文件在多个目录下重复出现,但只占用一份文件的空间。例如,一个大小为 10MB 的“E:a.doc”的文件,创建一个硬连接到“E:共享文件夹a.doc”中,则两个“a.doc”文件只占用一个文件的空间(10MB),两个文件的内容当然是完全一样的。如果编辑该文件的编辑器在修改保存文件时,依然保持源文件在 NTFS 文件夹中的位置,那么在“E:a.doc”上所作的改动会自动反映到“E:共享文件夹a.doc”中。同理,修改了“E:共享文件夹 a.doc”文件后,所作的修改也会立即反映到硬连接对应的“E:a.doc”文件。

创建硬连接之后,删除硬连接的副本(即连接点)只会将文件系统对文件数据的引用减一,只有删除所有的引用时,才真正删除文件。

“硬连接”还可以用于目录,这称为“目录连接点”(Junction)。例如,可以为“C:Applications”目录创建一个硬连接到“E:共享文件夹Applications”,则两个目录共享同样的存储空间,在“C:Applications”目录中对任何文件所作的改动都会立即反映到 “E:共享文件夹Applications”目录中对应的文件中去。同理,修改“E:共享文件夹Applications”目录中的文件,改动也会立即反映到“C:Applications”目录中去。

对于目录连接点需要注意:目录连接点连接到原来的目录,如果将源目录删除,则其连接点将不再可用,这与文件硬连接是不同的。

创建硬连接的操作方法:
1、在 Windows 资源管理器中,找到需要创建硬连接的文件,如
“E:a.doc”;
2、右键点击该文件,选择“选择源连接点”。
3、转到需要创建连接点的地方,如“E:共享文件夹”。
4、右键点击资源管理器文件列表的空白位置,选择“创建硬连接”(如果是目录,可选择“创建连接点→目录连接点[或其他选项]”)——在资源管理器的状态栏中对操作命令有说明。

首先要说的是,软件介绍中说到“Link Shell Extension 是一个可以在 NTFS 文件系统中创建“硬连接”的 Windows 资源管理器扩展”,所以,我们没办法直接在NAS里进行操作。我目前的方法是在windows里映射NAS的硬盘,然后在windows的资源管理器里进行操作。当然,因为这篇文章说的是初探,所以我只简单尝试了建立硬链接文件,至于后期有没有什么坑,现在还说不好。

起初我想力推这款软件的初衷是居然发现这款软件可以实现文件夹的链接,一开始还在窃喜,谁知道刚才复制软件介绍的时候才发现这样的话“对于目录连接点需要注意:目录连接点连接到原来的目录,如果将源目录删除,则其连接点将不再可用,这与文件硬连接是不同的。”[piapia打脸]NAS服务器之软链接、硬链接之初探 这样看来的话还是不能偷懒。

不过这款软件还是比较方便了,首先是他有右键菜单,这比要输入路径什么的还是要方便多了。

我目前的使用方法:

方法一:

1、在源文件上点右键,选择“选择源连接点”

2、转到需要创建连接点的地方,点右键,选择“创建硬连接”

方法二:

1、打开两个资源管理器窗口,并并列排列,一个为源文件所在文件夹,一个是目标文件夹

2、按住右键将源文件拖至目标文件夹,在快捷菜单选择建立硬链接

因为关于文件夹硬链接还是有可预知的问题,所以暂且不对文件夹进行批量操作了,虽然现在也是一个文件一个文件的操作,但是可以鼠标单手操作,还是方便多了。

下一步的设想:

1、对于已用tmm整理好的媒体库文件

使用上述的两种方法,逐一的将硬链接媒体文件(与源文件使用同一份存储空间)拖至电影独立的文件夹中,删掉原来复制过来的媒体文件(因为是复制,所以和源文件一样,也要占用一份存储空间),释放空间,然后将硬链接的文件改名,从而实现硬链接文件替换“实体占用存储空间”文件的目的。

2、对于新的还未用过tmm整理的媒体文件

使用上述方法,将硬链接文件先移到媒体库引用文件夹中,然后用tmm进行改名整理管理,这样的话硬链接文件就会被tmm自动改名和移到影片独立的文件夹中,这样硬链接文件是否还会有效?需要下一步测试之后才知道。

目前存在的问题(求大佬们帮忙解惑)

1、因为关于硬链接的介绍中有说到“不能跨分区做硬链接”,所以这个分区是怎么定义的,我在使用中感觉硬链接文件必须建立在同一个根目录下,如果跨目录的话就可能建立不成功要报错,但是这个根目录具体可以深到哪一层,有没有一个简单的判别方法,总不能一个个去试吧。比如在unraid系统中,共享文件夹download和video中就不可以互通建硬链接文件,但是在各自文件夹中则可以,是不是分区就是以共享文件夹这一层来区别?

2、关于硬链接文件的介绍中有说到“多个硬链接的文件具有相同的inode号”,经过我的测试,在群晖系统中,硬链接文件确实是具有同一个inode号,但是unraid系统下,硬链接的文件创建时期什么倒是相同,但是inode号并不一样,是因为unraid系统没有严格遵循linux的文件规则么?

总结

NAS所基于的linux框架自带的硬链接文件功能可以帮助我们实现存储空间的多次复用,希望可以对做家庭媒体服务器的朋友提供一些参考。有更优的解决方案也请朋友们留言,我会积极学习的!


展开阅读全文

查看更多好文内容,新用户限时领现金
全部评论 (30)
怂系青年
1
03-16 14:24
sakjsak: 我看了下你说的这个介绍,软链接足够了把。。tr下载馒头的时候把电影弄一个文件夹里就行了。。然后软链接到媒体库。。为啥要硬链接呢。另外楼上说的 鸟哥是《鳥哥的 Linux 私房菜 》这本书 1

1、下载的文件有些不需要加媒体库里; 2、媒体库内的文件会用tmm进行改名(包含文件名、和文件夹名),改名后会影响保种; 3、有些收藏电影,tr里删了后(选择同时删除媒体文件,保持tr记录与下载文件夹内文件一致),但需要媒体库里还存在。 基于以上3点需求要同时满足,同时避免后期可能带来的多余操作,软链接实现不了,只有硬链。

大内密炭
0
05-30 10:07
大内密炭: 我这边使用软链接,然后Jellyfin感觉无法处理。使用Jellyfin解码就会报错 1
怂系青年: 软链相当于快捷方式访问,如果源文件能解码,且链接后的文件有访问权,理论上应该是没问题的 2

嗯,有可能还是我操作有问题

怂系青年
0
05-27 20:05
大内密炭: 我这边使用软链接,然后Jellyfin感觉无法处理。使用Jellyfin解码就会报错 1

软链相当于快捷方式访问,如果源文件能解码,且链接后的文件有访问权,理论上应该是没问题的

大内密炭
0
05-27 19:53

我这边使用软链接,然后Jellyfin感觉无法处理。使用Jellyfin解码就会报错

怂系青年
0
03-24 10:30
夏达丶控: 嗯,我没有你的删除了源文件但是不删除资料库的需求。软链接既然相当于快捷方式的话,修改了源文件肯定会改的吧?我今天在软链接的目录里改了名字,但是回去看源文件的名字也改了。我理解的是硬链接的修改不会改源文件,但是软链接会改,不知道理解的对不对 1
怂系青年: 不知道你的软链接是怎么实现的。软链接相当于快捷方式,只是保存了所指向的源文件的信息,如路径、文件名等。所以,修改软链接文件不会对源文件有任何修改,包括文件名。类比来说,你在win下修改快捷方式的文件名,并不会同步修改源文件的文件名。说到同步,你是不是只是做了文件夹的同步映射,而不是软链接 2
展开隐藏评论
夏达丶控: 我大致明白了,我做的软链接是对整个电视剧目录做了软链接,修改的是软链接目录底下的文件,所以存在问题。之所以选择软链接是因为硬链接没有办法对整个目录进行硬链接(这里存疑,看贴吧说可以对文件夹进行硬链接,还没测试)如果说对电影文件挨个进行软链接的话,还不如挨个进行硬链接,这样还能实现你的需求之一(删除源文件,媒体库不删除),能不能留个你的联系方式,探讨一下 3

Q:软链接、4硬链接是linux自带的一种功能,8按照官方说明来看,2硬链接是无法对文件夹进行链接的,5因为硬链接基于incode号码,9而文件夹可能具有多个incode,8所以无法形成一一对应关系,9对文件夹的硬链从原理上就无法实现,9关于贴吧说的可以链接的内容,你可以再仔细看一下。虽然没有办法对文件夹进行链接,我现在的折中方法是,使用软件(文中有提到)在PC上实现鼠标化操作(非命令行下指令操作,可以大大提高效率),先建立文件夹,然后再在文件夹下进行文件的硬链接,我已经对movie、TV的媒体库进行了重建,目前运行良好。

夏达丶控
0
03-24 08:53
夏达丶控: 嗯,我没有你的删除了源文件但是不删除资料库的需求。软链接既然相当于快捷方式的话,修改了源文件肯定会改的吧?我今天在软链接的目录里改了名字,但是回去看源文件的名字也改了。我理解的是硬链接的修改不会改源文件,但是软链接会改,不知道理解的对不对 1
怂系青年: 不知道你的软链接是怎么实现的。软链接相当于快捷方式,只是保存了所指向的源文件的信息,如路径、文件名等。所以,修改软链接文件不会对源文件有任何修改,包括文件名。类比来说,你在win下修改快捷方式的文件名,并不会同步修改源文件的文件名。说到同步,你是不是只是做了文件夹的同步映射,而不是软链接 2

我大致明白了,我做的软链接是对整个电视剧目录做了软链接,修改的是软链接目录底下的文件,所以存在问题。之所以选择软链接是因为硬链接没有办法对整个目录进行硬链接(这里存疑,看贴吧说可以对文件夹进行硬链接,还没测试)如果说对电影文件挨个进行软链接的话,还不如挨个进行硬链接,这样还能实现你的需求之一(删除源文件,媒体库不删除),能不能留个你的联系方式,探讨一下

怂系青年
0
03-23 22:26
夏达丶控: 嗯,我没有你的删除了源文件但是不删除资料库的需求。软链接既然相当于快捷方式的话,修改了源文件肯定会改的吧?我今天在软链接的目录里改了名字,但是回去看源文件的名字也改了。我理解的是硬链接的修改不会改源文件,但是软链接会改,不知道理解的对不对 1

不知道你的软链接是怎么实现的。软链接相当于快捷方式,只是保存了所指向的源文件的信息,如路径、文件名等。所以,修改软链接文件不会对源文件有任何修改,包括文件名。类比来说,你在win下修改快捷方式的文件名,并不会同步修改源文件的文件名。说到同步,你是不是只是做了文件夹的同步映射,而不是软链接

夏达丶控
0
03-23 21:05

嗯,我没有你的删除了源文件但是不删除资料库的需求。软链接既然相当于快捷方式的话,修改了源文件肯定会改的吧?我今天在软链接的目录里改了名字,但是回去看源文件的名字也改了。我理解的是硬链接的修改不会改源文件,但是软链接会改,不知道理解的对不对

夏达丶控
0
03-23 15:16
夏达丶控: 我也遇到了这个问题,tr下载的因为要保种,不敢乱改名字,不改名字媒体库刮削又不好。我跟你的需求有点不同,我tr下载的时候已经分了不同的文件夹,只需要对一到两个文件夹链接到媒体库就可以了,而且也不存在想删除原文件,但是媒体库保留的问题,像我这样的直接软链接就可以了? 1
怂系青年: 基于你目前的需求,软连接确实可以。不过你想没想过硬盘的容量总有装满的一天,那个时候你可能就会想到删保种的文件了 2

删除会有什么影响吗?我把整合目录软链接好像也不行,软链接好像就是个快捷方式,我初步想着是单独弄个文件夹给媒体库用,但是媒体库在软链接的目录里修改,其实原来的目录里内容也会变

eMuzi
0
03-22 23:22

谢谢分享!

打开App,查看更多好文和评论
最新NAS存储优惠
QNAP 威联通 TS-453Bmini 四盘位NAS网络存储(J3455、4GB内存)
QNAP 威联通 TS-453Bmini 四盘位NAS网络存储(J3455、4GB内存)

存储设备热度Top1 近30日已发布新低

1899元包邮
京东 06-06
509 89%
京东PLUS会员:QNAP 威联通 TS-428 四盘位 NAS网络存储
京东PLUS会员:QNAP 威联通 TS-428 四盘位 NAS网络存储

京东好评率97%

1249元包邮(需用券)
京东 06-04
13 64%
QNAP 威联通 TS-453Bmini 四盘位NAS网络存储(J3455、4GB内存)
QNAP 威联通 TS-453Bmini 四盘位NAS网络存储(J3455、4GB内存)

京东好评率98% 比上次发布低9%

1999元包邮
京东 06-04
11 31%
QNAP 威联通 TS-428 四盘位 NAS网络存储
QNAP 威联通 TS-428 四盘位 NAS网络存储

京东好评率97%

1299元包邮
京东 06-01
6 89%
查看更多
猜你喜欢
查看更多
相关好价
相关商品
查看更多热门商品
社区主页 文章详情
11
58
30
你已经点过赞了
新浪微博 QQ空间 微信好友 豆瓣
当前为触屏版
热门搜索