【问题标题】:S3FS - Recursive CHOWN/CHMOD takes a LONG timeS3FS - 递归 CHOWN/CHMOD 需要很长时间
【发布时间】:2015-08-24 08:05:14
【问题描述】:

当您有几个目录(大约 70 个),每个目录包含很多文件时,任何在 s3fs 挂载上的递归 chownchmod 命令都需要很长时间。

这些命令中的任何一个都可能需要将近 24 小时。我必须这样做,否则 Apache 进程无法访问这些文件/目录。普通挂载上的命令大约需要 20 秒。

安装方式:

/storage -o noatime -o allow_other -o use_cache=/s3fscache -o default_acl=public-read-write

/etc/fuse.conf:

user_allow_other

使用最新版本:1.78

关于如何更快地做到这一点的任何想法?

【问题讨论】:

  • 哎哟..好吧...没人?
  • 在 ubuntu16 上找到相同的东西,很多文件很慢

标签: amazon-s3 fuse s3fs


【解决方案1】:

一段时间后,我发现并行进程以加快速度会更好。示例:

find /s3fsmount/path/to/somewhere -print | xargs --max-args=1 --max-procs=100 chmod 777

它仍然很慢,但远没有以前那么慢。

【讨论】:

    【解决方案2】:

    使用aws cli 可能会有所帮助。

    我做什么:

    1. 使用aws cli获取目标目录的完整文件列表。
    2. 编写脚本以并行执行chmod 777 到每个文件(使用> /dev/null 2>&1 &

    然后我发现 chmod 作业立即完成,来自 ps -ef

    我的 PHP 代码:

    <?php
    
    $s3_dir = 'path/to/target/';
    $s3fs_dir = '/mnt/s3-drive/' .$s3_dir;
    echo 'Fetching file list...' . "\n\n";
    sleep(1.5);
    
    $cmd = 'aws s3 ls --recursive s3://<bucket_name>/' . $s3_dir;
    exec($cmd, $output, $return);
    
    $num = 0;
    if ( is_array($output) ) {
        foreach($output as $file_str) {
            if ( $num>100 ) {
                sleep(4);
                $num=0;
            }
    
            $n = sscanf( $file_str, "%s\t%s\t%s\t". $s3_dir ."%s", $none1, $none2, $none3, $file );
            $cmd = 'chmod 777 ' . $s3fs_dir . $file . ' > /dev/null 2>&1 &';
            echo $cmd ."\n";
            exec( $cmd );
            $num+=1;
        }
    }
    
    ?>
    

    【讨论】:

    • 这太棒了。解决问题的好方法。干得好:)
    【解决方案3】:

    更换用户

    find /s3fsmount/path/to/somewher -print | xargs --max-args=1 --max-procs=100 sudo chown -R  user:user
    

    对我有用..

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2013-09-07
      • 2020-08-26
      • 2014-10-09
      相关资源
      最近更新 更多