[Exchange and share] deepin23无法删除文件到回收站的问题找到一些原因
Tofloor
poster avatar
璀璨星空
deepin
2024-08-24 01:02
Author

记得之前的20没有这个问题无论是如何挂载分区都能删除文件到回收站,而到了23却出现了限制,后来机缘巧合方面发现了23竟然在回收站这个机制上出现了更改,不在是像之前的那样回收站的目录是在'/home/用户/.local/share/Trash/'与'/root /.local/share/Trash/'这两个目录里一个是用户目录一个是管理员目录,根据删除文件时用的权限不一样回移动到不同的目录里。而23则在此基础上又加了一个在每个分区上加了两个回收站目录/.Trash-0与/.Trash-1000,这两个也是根据删除文件时用的权限不一样回移动到不同的目录里,/.Trash-0是使用管理员模式删除文件的回收站,/.Trash-1000是使用普通用户模式删除文件时的回收站。

'/.Trash-0' ='/root /.local/share/Trash/'

'/.Trash-1000' = '/home/用户/.local/share/Trash/'

image.png

但是因为23是新旧两规则都有所以现在是处于起冲突的状态,除非只有单根/才行,单/只会用旧规则,如果有多个分区挂载不同的目录就会起冲突。

本期测试了三个系统20.9开启btrfs子卷、23只用了btrfs未开启子卷、23开启btrfs子卷

一、20.9开启btrfs子卷

本来也以为23的问题是不是跟子卷也有关系,就实验了一下,将20.9加上了btrfs的子卷,但是它的删除文件一切正常没有问题,因为它只用了旧规则'/home/用户/.local/share/Trash/'与'/root /.local/share/Trash/'这两个回收站所在位置,旧规则就是无论你如何挂载分区,都不耽误人家的规则,人家就定位在这两个目录里了

# /dev/sdb1
UUID=d93e886d-03cb-4582-ba76-08c896923d2c	/data         	btrfs      	rw,relatime,ssd,compress=zstd,subvol=@data	0 2


/data/home		 /home					none			defaults,bind	 	0 0
/data/opt 		/opt 					none 			defaults,bind	 	0 0
/data/root 		/root 					none 			defaults,bind 	0 0
/data/var		/var					none 			defaults,bind 	0 0
/data/local		 /usr/local				none 			defaults,bind 	0 0
/data/mnt 		/mnt					none 			defaults,bind 	0 0 
/data/tmp 		/tmp					none 			defaults,bind 	0 0 
/data/www		/www				 	none 			defaults,bind 	0 0

# /dev/sdb2
UUID=c8dc4c54-16b0-4dd7-ab70-13d0800eef19	/Home-dell         	btrfs      	rw,relatime,ssd,compress=zstd,subvol=@Home-dell	0 2

/Home-dell/dell/Desktop		/home/dll/Desktop	none		defaults,bind		0 0
/Home-dell/dell/Videos		/home/dll/Videos		none		defaults,bind	 	0 0
/Home-dell/dell/Pictures 		/home/dll/Pictures 	none 		defaults,bind	 	0 0
/Home-dell/dell/Documents	 	/home/dll/Documents 	none 		defaults,bind 		0 0
/Home-dell/dell/Downloads		/home/dll/Downloads	none 		defaults,bind 		0 0
/Home-dell/dell/Music		 /home/dll/Music		none 		defaults,bind 		0 0

二、23只用了btrfs未开启子卷

一开始只能在Home-Dell挂载点下的/Home-Dell与/Home-Dell/dell这两个目录里才能正常的删除到23新加的回收站目录里,到了/Home-Dell/dell再往下的目录如/Home-Dell/dell/Desktop就不行了,因为/Desktop本质是挂载了/home目录下的文件,如果要删除/Home-Dell/dell/Desktop目录下的文件按照20旧版本规则应该是删除到'/home/用户/.local/share/Trash/'下边,但是23新的的规则就是除了/目录的分区就会建立新的回收站目录,在这些分区下删除的文件应该到这些新的回收站里,因为新旧两个规则起冲突了,导致现在的问题,无法删除到回收站,然后我将/data挂载点下的/root给禁用掉了,发现/data目录下的文件竟然可以删除了,由此可以大概得出,在data下如果有root,因为引起新旧规则的冲突

# /dev/nvme0n1p3 LABEL=data
UUID=7cac4569-6eca-4495-96fe-e45d2c1aeed1	/data         	btrfs     	rw,relatime,ssd,space_cache=v2	0 0
/data/home		 /home					 none			 defaults,bind	 0 0
/data/local		 /usr/local				none 			defaults,bind 	0 0
/data/mnt	 	/mnt					none 			defaults,bind 	0 0
/data/opt 		/opt 					none 			defaults,bind	 0 0
/data/tmp		/tmp			 		none 			defaults,bind 	0 0
#/data/root 		/root 					none 			defaults,bind 	0 0
/data/var			/var					 none 			defaults,bind 	0 0

# /dev/nvme0n1p4 LABEL=Home-Dell
UUID=a7938259-10b6-4f1e-9646-33f63524d85a	/Home-Dell         	btrfs     	rw,relatime,ssd,space_cache=v2	0 0
/Home-Dell/dell/Desktop		/home/Dell/Desktop	none		defaults,bind		0 0
/Home-Dell/dell/Videos		/home/Dell/Videos		none		defaults,bind	 	0 0
/Home-Dell/dell/Pictures 		/home/Dell/Pictures 	none 		defaults,bind	 	0 0
/Home-Dell/dell/Documents 	/home/Dell/Documents 	none 		defaults,bind 		0 0
/Home-Dell/dell/Downloads	/home/Dell/Downloads	none 		defaults,bind 		0 0
/Home-Dell/dell/Music		 /home/Dell/Music		none 		defaults,bind 		0 0

三、23开启btrfs子卷

23这里开启子卷后就没法用新规则了,但是旧规则也无法用,在这里我也是用的跟上方23未开启子卷的顺序测试的,光在data这里就卡住了,无法删除新旧规则都无法用,大胆猜测一下新规则还没适配子卷环境但是依旧与旧规则有冲突,新规则只是无法用不是不生效,在两个规则都生效的情况下就抵消了

# /dev/sda3 LABEL=@deepin
UUID=b78738d8-20c3-4a1e-a5c0-034d649e4970	/data         	btrfs     	rw,relatime,ssd,space_cache=v2,ssd,subvol=@data	0 2

/data/home		 /home					 none			 defaults,bind	 0 0
/data/local		 /usr/local				none 			defaults,bind 	0 0
/data/mnt	 	/mnt					none 			defaults,bind 	0 0
/data/opt 		/opt 					none 			defaults,bind	 0 0
/data/tmp		/tmp			 		none 			defaults,bind 	0 0
/data/root 		/root 					none 			defaults,bind 	0 0
/data/var			/var					 none 			defaults,bind 	0 0

# /dev/sda4 LABEL=@deepin
UUID=23555869-8c41-478d-a462-b7aff62e840c	/home-Dell         	btrfs     	rw,relatime,ssd,space_cache=v2,ssd,subvol=@home-Dell	0 0


/home-Dell/Dell/Desktop		/home/Dell/Desktop	none		defaults,bind		0 0
/home-Dell/Dell/Videos		/home/Dell/Videos		none		defaults,bind	 	0 0
/home-Dell/Dell/Pictures 		/home/Dell/Pictures 	none 		defaults,bind	 	0 0
/home-Dell/Dell/Documents 	/home/Dell/Documents 	none 		defaults,bind 		0 0
/home-Dell/Dell/Downloads	/home/Dell/Downloads	none 		defaults,bind 		0 0
/home-Dell/Dell/Music		 /home/Dell/Music		none 		defaults,bind 		0 0

结语

ps:当初在不知道原因的情况下,四处找解决办法,知道了原本的回收站规则'/home/用户/.local/share/Trash/'与'/root /.local/share/Trash/'。这个是大多数发行版都在用的,但是它有一个缺点,因为这两个地方是跟随/home与/root两个目录的,这两个目录在个分区,删除文件到回收站是文件就会往那个分区上移动,相当于从甲给到乙跨分区操作,小文件还好但是大文件跨区复制粘贴加删除的情况下图增硬盘损耗与耗时。后来知道了windows的是在每个分区上都有一个单独的回收站目录,本来还想着如何更改23让它跟win的一样,通过ai搜索倒是发现可以用脚本来实现,但是都不太完美,然后偶然发现23竟然已经上了,再然后通过验证发现正是因为新规则与旧规则的冲突才导致的问题。23新的规则就跟windows上的类似都是在本分区上建立一个回收站,这样删除文件时就相当于从左手放右手在本分去操作。希望不要放弃这个新的规则,也尽快完善和在子卷上的适配问题。比较旧规则貌似不适合这个大文件时代,有些文件如下载了一个镜像不小心点击删除,旧规则还在哪里费劲复制粘贴加删除,中断又怕出问题,新规则就能一下子就到回收站也能一下子移动出来,解决了老规则的复制粘贴+删除原文件这个耗时弊端

补充:第三个23开启子卷时没测试单个根分区情况下是否能删除,但测试了用ext4文件系统单个/分区的,发现如果用管理员模式来删除普通用户模式创建的文件,也是无法到回收站的

2024/8/26:测试了以下在开启子卷下的deepin23跟只用ext4的一样,只要是单根分区就行,目前看如果按照之前的老的回收站方式一切正常,还有一点就是新的回收站方式它不支持子卷,就是在子卷里边创建回收站目录,如非子卷方式挂载/data分区,如果将里边的/root给禁用掉,那它这个分区就会创建新的回收站目录,但是开启子卷的情况下就不会创建回收站目录

2024/8/26 19点:刚刚发现通过系统自带的《看图》删除的软件会到'/home/用户/.local/share/Trash/'(在普通用户模式下,系统环境是第三个开启子卷的环境)

Reply Favorite View the author
All Replies
f@deepin
deepin
2024-08-24 06:22
#1

不知所云

Reply View the author
璀璨星空
deepin
2024-08-24 08:52
#2
f@deepin

不知所云

回收站方式发生啦改变,20时删除文件文件是放到'/root /.local/share/Trash/'与'/home/用户/.local/share/Trash/'这两个目录里

版本的23则是如果是单个'/'分区的,就是不想将其中的如home之类的挂载到其它分区时,只在’/‘分区删除文件时文件的删除到回收站的路径是跟20的一样,但是如果将它们挂载到其它分区上则会启用新的回收站方式,在每个分区上建立两个新的回收站目录'/.Trash-0'管理员模式删除的文件和'/.Trash-1000'普通用户模式删除的文件。

但是现在的两个方式是有一定冲突的,如我自建了一个/data的分区,里边存在很多目录,其中一个就是/root。当它存在时系统会在删除文件时两个删除到回收站的方式都启用,导致起冲突无法到回收站。

还有就是我将桌面、音乐等目录也单独挂载到了一个叫Home-Dell的分区上,但是它们原本时'/home/用户'目录下的,所以即便它们挂载到其地方,在这几个目录下删除文件也是会两个方式一起,导致起冲突

'/.Trash-0' ='/root /.local/share/Trash/'

'/.Trash-1000' = '/home/用户/.local/share/Trash/'

上述是一与二得出的结论,但是到三就没用了不知道咋滴了

Reply View the author
hanzn-zzx
deepin
2024-08-24 09:18
#3

所以还是一根到底好哈哈哈joy

Reply View the author
璀璨星空
deepin
2024-08-24 09:37
#4
hanzn-zzx

所以还是一根到底好哈哈哈joy

本质还是新旧的回收站规则的错误,也许只保存其一就好了

Reply View the author
neko
deepin
Ecological co-builder
2024-08-24 09:44
#5

专业

Reply View the author
ljq790615
deepin
2024-08-24 14:06
#6

我自建了一个/data的分区,现在问题是在文件管理器里面,非root用户不允许删除文件,只能命令行进行删除。

Reply View the author
璀璨星空
deepin
2024-08-24 15:17
#7
ljq790615

我自建了一个/data的分区,现在问题是在文件管理器里面,非root用户不允许删除文件,只能命令行进行删除。

可以用sudo chmod u+rwx,g+rwx,o+rwx,a+rwx来进行赋权,具体可以通过ai查寻

Reply View the author