Подключение Amazon S3 в качестве сетевого диска в Linux

Эта статья будет полезна обладателям аккаунта облачных сервисов Amazon Web Services (AWS), в частности, пользователям Amazon Simple Storage Service (S3), который предоставляет возможность хранения очень внушительного объёма данных с возможностью доступа к ним в любое время из любой точки мира, где есть интернет.

Далее я расскажу как подключить это просторное хранилище к вашему серверу на базе Linux (Debian), чтобы работать с ним, как с сетевым диском, не используя для копирования файлов дополнительных утилит, наподобие s3cmd.

Первым делом установим необходимые пакеты:

sudo apt-get install build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool pkg-config libssl-dev

Затем скачиваем исходники утилиты s3fs-fuse:

cd /usr/src
git clone https://github.com/s3fs-fuse/s3fs-fuse
cd s3fs-fuse

Конфигурируем и собираем:

./autogen.sh
./configure --prefix=/usr --with-openssl
make

Чтобы не замусоривать систему, сделаем deb-пакет с помощью checkinstall:

checkinstall
checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.


The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs?  [y]:

Preparing package documentation...OK

Please write a description for the package.
End your description with an empty line or EOF.
 >> s3fs-fuse
 >>

Параметры для пакета выставляем приблизительно такие:

This package will be built according to these values:

0 -  Maintainer: [ root@host ]
1 -  Summary: [ s3fs-fuse 1.82 ]
2 -  Name:    [ s3fs-fuse ]
3 -  Version: [ 1.82 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ s3fs-fuse ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ s3fs ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Enter a number to change any of them or press ENTER to continue:

После нажатия ENTER запустится сборка пакета, а затем его устанавка. В случае успеха на экране увидим примерно следующее:

=== Installation successful ===

Copying documentation directory...
./
./COPYING
./README.md
./doc/
./doc/Makefile.in
./doc/Makefile.am
./doc/man/
./doc/man/s3fs.1
./doc/Makefile
./INSTALL
./AUTHORS
./ChangeLog

Copying files to the temporary directory...OK

Stripping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK

Building Debian package...OK

Installing Debian package...OK

Erasing temporary files...OK

Deleting temp dir...OK


********************************

 Done. The new package has been installed and saved to

 /usr/src/s3fs-fuse/s3fs-fuse_1.82-1_amd64.deb

 You can remove it from your system anytime using:

      dpkg -r s3fs-fuse

********************************

Для доступа к AWS S3 необходимо поместить в текстовый файл (по умолчанию ~/.passwd-s3fs) идентификатор и ключ в виде:

MYIDENTITY:MYCREDENTIAL

Ограничим доступ к нему посторонним:

chmod 600 ~/.passwd-s3fs

Создаём точку монтирования, например, в домашнем каталоге:

mkdir ~/s3bucket

Запускаем s3fs, указав название ведра (bucket) S3, которое нужно смонтировать:

s3fs MYBUCKET ~/s3bucket

Если с первого раза не получилось, то повторяем команду, включив вывод лога на экран:

s3fs MYBUCKET ~/s3bucket -d -d -f -o f2 -o curldbg

Размонтирование производится обычной командой umount:

umount ~/s3bucket

Чтобы ведро (bucket) S3 автоматически монтировалось при загрузке операционной системы, например, в каталог /mnt, нужно добавить в файл /etc/fstab такую строку:

s3fs#MYBUCKET /mnt fuse _netdev,allow_other 0 0

Правда, в случае ошибки монтирования, ОС может и не загрузиться, поэтому рекомендую производить монтирование через файл /etc/rc.local командой:

s3fs -o allow_other -o passwd_file=/root/.passwd-s3fs MYBUCKET: /mnt

Чтобы не указывать в параметрах путь к файлу с паролем, можно поместить его в /etc/passwd-s3fs:

echo MYIDENTITY:MYCREDENTIAL > /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs

Теперь несколько слов об ограничениях. Не стоит ожидать от Amazon S3 такой же производительности, как от локальной файловой системы. Вот некоторые особенности при работе с S3:

  • любое изменение файла требует перезаписи всего файла
  • операции с метаданными, такие как получение содержимого каталога, имеют низкую производительность из-за латентности сети
  • «согласованность в конечном счёте» может быть причиной временного получения устаревших данных (Amazon S3 Data Consistency Model)
  • переименования файлов и каталогов не являются атомарными операциями
  • нет координации между несколькими клиентами, работающими с одним и тем же ведром (bucket)
  • отсутствуют жесткие ссылки (hard links)

Добавить комментарий