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
может помочь
что я делаю:
- использование
aws cli
чтобы получить полный список файлов целевого каталога. - написать скрипт для параллельного выполнения
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