相关疑难解决方法(0)

加速复制1000000个小文件

我有百万4-20 KB文件的目录(可以产生类似的这样的文件:seq 10000 | gzip > a; seq 1000000 | parallel --bar 'head -c{=$_=int(rand()*16)+4=}k a > {}'

. 我需要复制那个目录。但似乎我必须为每个文件做一个搜索,所以这需要很长时间。

有什么方法可以加快速度吗?

我目前在想,如果我能得到这些文件占用的磁盘块,我可以对它们进行排序,合并接近的块(鉴于顺序读取通常比寻找更快)并读取这些块,以便它们在 RAM 中在进行复制之前缓存(我有 32 GB RAM)。

但是为了让它工作,我需要一种方法来识别文件所在的块。

我在磁性设备(即不是 SSD)上使用 EXT4。

编辑:

这应该有效,但它没有:

ls |
parallel -IOO --pipe "sudo parallel -j100 hdparm --fibmap {}'|tail -n +5'" |
sort -nk 2 | 
perl -ane 'if($u+10000 < $F[1]) { print "$l ",($u-$l),"\n"; $l=$F[1] } $u=$F[2]' |
sudo parallel --colsep ' ' dd if=/dev/sda1 skip={1} bs=512 count={2} '| cat >/dev/null'
Run Code Online (Sandbox Code Playgroud)

在大文件上测试时,它不会缓存文件。

编辑2: …

filesystems cache

12
推荐指数
2
解决办法
8350
查看次数

如何在 sun solaris 中创建压缩焦油?

我已登录到 Sun Solaris OS。我想创建并提取一个压缩的 tar 文件。我试过这个普通的 UNIX 命令:

tar -cvzf file.tar.gz directory1
Run Code Online (Sandbox Code Playgroud)

在 Sun OS 中执行失败并出现以下错误

bash-3.2$ tar -cvzf file.tar.tz directory1
tar: z: unknown function modifier
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...
Run Code Online (Sandbox Code Playgroud)

tar

11
推荐指数
2
解决办法
3万
查看次数

标签 统计

cache ×1

filesystems ×1

tar ×1