我将文件从旧服务器移到了新服务器。我不知道为什么,但当我想压缩文件夹时,它总是挂在某个文件夹中。
一开始我以为失败了,所以按 取消ctrl+c
,但是我试了多次,结果总是一样。
我的 zip 命令是:
zip -r backup.zip /var/www -x '*.log*'
我尝试了很多zip
带有或不带有参数/arg 的命令但仍然挂在/admin/storage/logs/0
目录中。
挂断时,zip 过程仍在运行,因此我尝试等待大约 3 个小时,直到它完成。
完成后,我将.zip
这个 7.7 GB 大小的文件移动到新服务器,然后尝试提取它。提取时返回:
/admin/storage/logs/0:写入错误(磁盘已满?)
我的新服务器有 160 GB,而旧服务器只有大约 15 GB。是什么导致新服务器已满?
经过研究,我发现文件夹/admin/storage/logs/
有 134 GB 大小,但当我运行命令时ls
它是空的。我删除了该文件夹,但当我运行时,df -h
使用的磁盘空间仍然相同。
以下是我的命令历史记录:
root@ip-172-26-4-220:/var/www/www/admin/storage# du -hs * | sort -rh
134G logs
1.2G app
32K framework
8.0K debugbar
root@ip-172-26-4-220:/var/www/www/admin/storage# cd logs/
root@ip-172-26-4-220:/var/www/www/admin/storage/logs# du -hs * | sort -rh
134G 0
root@ip-172-26-4-220:/var/www/www/admin/storage/logs# cd ..
root@ip-172-26-4-220:/var/www/www/admin/storage# rm -r logs/
root@ip-172-26-4-220:/var/www/www/admin/storage# du -hs * | sort -rh
1.2G app
32K framework
8.0K debugbar
root@ip-172-26-4-220:/var/www/www/admin/storage# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 156G 156G 2.2M 100% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 796M 832K 796M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
如何释放空间?
旧服务器上的admin/storage/logs
文件夹只有 52M:
[root@server storage]# du -hs * | sort -rh
3.4G app
52M logs
2.7M framework
4.0K oauth-public.key
4.0K oauth-private.key
4.0K debugbar
为什么解压的 .zip 文件大小超过了 134 GB?
[root@server admin]# cd storage/logs/
[root@server logs]# ls -lh
total 51M
-rwxrwxrwx 1 root root 1.0T Sep 30 2020 0
drwxr-xr-x 2 root root 8.0K Sep 1 12:00 cron
-rwxrwxrwx 1 apache apache 1.6K Mar 6 2020 frontend-response-2020-03-06.log
-rwxrwxrwx 1 apache apache 720 Mar 23 2020 frontend-response-2020-03-23.log
-rwxrwxrwx 1 apache apache 353 Apr 29 2020 frontend-response-2020-04-29.log
-rwxrwxrwx 1 apache apache 719 Apr 30 2020 frontend-response-2020-04-30.log
-rw-r--r-- 1 apache apache 51M Sep 1 18:00 laravel.log
[root@server logs]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 188M 1.7G 10% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda2 36G 25G 11G 71% /
tmpfs 379M 0 379M 0% /run/user/0
哇,文件0
有 1 TB 大小。但为什么df
只使用了 25GB?也许我需要先将其删除,然后再进行迁移?
答案1
该文件/var/www/admin/storage/logs/0
很可能是一个稀疏文件。也就是说,它不包含整个长度的实际数据。有些部分从未被写入,因此不占用磁盘上的任何空间。如果读取这些部分,则 Linux 内核只会返回一系列值为 0 的字节,这些字节的压缩效果非常好,因此将zip
整个 1 TB 文件放入 7.7 GB 的存档中毫无问题。但是,在解压存档时,unzip
它会尝试将所有这些零写入磁盘,因为它不知道旧服务器上实际上并不存在这些零。
您有两种可行的行动方案:
a) 删除旧服务器上的文件,或者至少将其从 zip 存档中排除。它可能不包含任何有用的东西。稀疏日志文件很不常见,通常只会因为某些故障、日志轮换不当或类似情况而发生。
b) 不要使用,而是zip
使用支持稀疏文件的归档程序,例如 GNU tar,它能够在新服务器上重新创建稀疏文件。