S3FS - рекурсивный CHOWN/CHMOD занимает много времени

Любой рекурсивный chown или же chmod Команда на монтирование s3fs занимает много времени, когда у вас есть несколько каталогов (около 70), каждый из которых содержит довольно много файлов.

Любая из этих команд может занять почти 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

Есть мысли о том, как сделать это быстрее?

4 ответа

Через некоторое время я обнаружил, что лучше всего распараллелить процессы, чтобы ускорить их. Пример:

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

Это все еще медленно, но далеко не так медленно, как это было.

С помощью 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;
    }
}

?>

Для смены пользователя

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

это работает меня ..

Вот улучшение ответа @jafo ( /questions/9590809/s3fs-rekursivnyij-chownchmod-zanimaet-mnogo-vremeni/9590827#9590827) на случай, если нужно изменить только несколько файлов:поскольку изменение владельца или группы файла через S3FS требует повторной загрузки всего файл, поэтому это занимает очень много времени (см.: /questions/56704556/chmodchown-rabotaet-medlenno-s-fajlami-hranyaschimisya-s-ispolzovaniem-s3fs-na-e/56809902#56809902).

Если необходимо изменить только несколько файлов, вы можете выбрать только те файлы, которые необходимо изменить (на основе /questions/60699912/ispolzovanie-find-dlya-poiska-fajlov-ne-prinadlezhaschih-polzovatelyu-ili-gruppe/61015970#61015970):

      my_directory=<my_directory>
my_user=<my_user>
my_group=<my_group>

find $my_directory \( ! -user $my_user -o ! -group $my_group \) -print0 | xargs -0 --max-args=1 --max-procs=10 chown -v $my_user:$my_group
Другие вопросы по тегам