您尚未登录。

#16 2014-10-11 23:59:06

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,432
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

systemd-tmpfiles-clean.service 会删这种东西么 0.0

离线

#17 2014-10-12 00:22:30

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,432
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

看描述挺像是 systemd-tmpfiles 干的。不过我检查了一下,systemd-216/src/tmpfiles/tmpfiles.c 第 310 行已经对挂载点作了处理,systemd-tmpfiles 不会清理挂载点内的文件。不过这是 systemd 216 的行为,不知道之前的版本怎样。

离线

#18 2014-10-12 08:08:36

axlrose
会员
注册时间: 2011-08-20
帖子: 27
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

cd /tmp
-------------------------------------------------------------------------
touch --date=1999-09-09 -a -m test_1999-09-09
修改系统时间为1999年或者比今年更早几年的时间
touch test_1999-09-09
stat test_1999-09-09 查看时间
-------------------------------------------------------------------------
同上方法创建另一个文件,仅修改 sudo chown root:root 新文件
运行 systemd-tmpfiles --clean

离线

#19 2014-10-12 08:18:24

axlrose
会员
注册时间: 2011-08-20
帖子: 27
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

可以做个测试,我准备拿个u盘来测试,用上面的方法
一定要修改 atime, ctime, mtime, 目前修改ctime只有修改系统时间的办法
tmpfile.c的代码大致看了一下遇到s.st_uid==0的时候会跳过,所以像root属主的文件是会被保留的
目前像用户挂上去的u盘之类的,如果使用 pcmanfm-qt之类的自动挂载会被挂到 /run下面,/run其实也是个tmpfs不过创建的方式不一样

 $ mount| grep run
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=800064k,mode=700,uid=1000,gid=1000)

像这种会被保护,查看/run下的目录属主基本上都是root

离线

#20 2014-10-12 08:29:50

axlrose
会员
注册时间: 2011-08-20
帖子: 27
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

/etc/tmpfiles.d/tmpdir.conf 文件的内容

#Type Path        Mode UID  GID  Age Argument
#d    /run/user   0755 root root 10d -
#L    /tmp/foobar -    -    -    -   /dev/null

d /tmp/debian  0755 arch arch 10d -
d /tmp/mmc  0755 arch arch 10d -
d /tmp/iso  0755 arch arch 10d -
d /tmp/arch64 0755 arch arch 10d -
d /tmp/android  0755 arch arch 10d -

我的debian挂在 /tmp/debian目录下

离线

#21 2014-10-12 08:43:18

axlrose
会员
注册时间: 2011-08-20
帖子: 27
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

测试结果出来了
挂了一个u盘,文件是跟我debian分区的一样都是ext4
修改系统时间,创建几个文件时间是很早前的,用stat来确认所有的atime,mtime, ctime (ctime非常关键)
然后运行systemd-tmpfile --clean ,其实systemd-tmpfiles-clean.service 也就是被 那个timer定时去执行一下,默认是15分钟执行一次
结果是我的u盘和我的debian挂载分区上的旧文件全部给干掉,竟然把我故意在/tmp/debian目录下创建属主为root的临时文件也给干掉了

离线

#22 2014-10-12 08:58:44

axlrose
会员
注册时间: 2011-08-20
帖子: 27
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

通过代码发现会去解析好几个目录下的配置文件,其中/etc/tmpfiles.d就是其中一个
测试发现跟/etc/tmpfiles.d/tmpdir.conf配置关系很大
我将/etc/tmpfiles.d/tmpdir.conf中的 /tmp/mmc目录给注释了,然后在u盘上创建很老的文件,挂在/tmp/mmc下,此时执行systemd-tmpfile --clean是不会清掉旧文件的
当将 d /tmp/mmc  0755 arch arch 10d - 开启后,再运行清理时,文件就消失了

之前创建/etc/tmpfiles.d/tmpdir.conf 是图个方便,开起自动创建tmp目录,看来还得换回rc.local的旧方式才行 rc-locale.service

离线

#23 2014-10-12 13:47:01

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,432
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

axlrose 说:

通过代码发现会去解析好几个目录下的配置文件,其中/etc/tmpfiles.d就是其中一个
测试发现跟/etc/tmpfiles.d/tmpdir.conf配置关系很大
我将/etc/tmpfiles.d/tmpdir.conf中的 /tmp/mmc目录给注释了,然后在u盘上创建很老的文件,挂在/tmp/mmc下,此时执行systemd-tmpfile --clean是不会清掉旧文件的
当将 d /tmp/mmc  0755 arch arch 10d - 开启后,再运行清理时,文件就消失了

之前创建/etc/tmpfiles.d/tmpdir.conf 是图个方便,开起自动创建tmp目录,看来还得换回rc.local的旧方式才行 rc-locale.service

你为什么要自己写那么个 /etc/tmpfiles.d/tmpdir.conf 呀。是想自动建立那几个目录吗?那你别写 Age 选项呀。那个就是告诉 systemd 去删掉比 Age 值老的文件的。

离线

#24 2014-10-12 16:43:35

axlrose
会员
注册时间: 2011-08-20
帖子: 27
个人网站

Re: [求解]ArchLinux莫名其妙导致数据丢失,损失严重。。。

就是根据Age 来比较,之前抄的/run的一个配置来了,就是想自动创建/tmp/下的目录,现在改成/etc/rc.local老方式了
man tmpfiles.d 查看Age里面有提到,不应该设置时间,弄成 - 就可以避免这个问题
还是比较粗心了

离线

页脚