Андроид требует доступ к внешнему хранилищу. Как хранить файлы, чтобы иметь к ним доступ с любого устройства? Доступ к файлам из интернета

Android uses a file system that"s similar to disk-based file systems on other platforms. This page describes how to work with the Android file system to read and write files with the APIs.

Choose internal or external storage

All Android devices have two file storage areas: "internal" and "external" storage. These names come from the early days of Android, when most devices offered built-in non-volatile memory (internal storage), plus a removable storage medium such as a micro SD card (external storage). Many devices now divide the permanent storage space into separate "internal" and "external" partitions. So even without a removable storage medium, these two storage spaces always exist, and the API behavior is the same regardless of whether the external storage is removable.

Because the external storage might be removable, there are some differences between these two options as follows.

Tip: Although apps are installed onto the internal storage by default, you can allow your app to be installed on external storage by specifying the attribute in your manifest. Users appreciate this option when the APK size is very large and they have an external storage space that"s larger than the internal storage. For more information, see .

Save a file on internal storage

Your app"s internal storage directory is specified by your app"s package name in a special location of the Android file system that can be accessed with the following APIs.

On Android 6.0 (API level 23) and lower, other apps can read your internal files if you set the file mode to be world readable. However, the other app must know your app package name and file names. Other apps cannot browse your internal directories and do not have read or write access unless you explicitly set the files to be readable or writable. So as long as you use for your files on the internal storage, they are never accessible to other apps.

Write a cache file

If you instead need to cache some files, you should use . For example, the following method extracts the file name from a and creates a file with that name in your app"s internal cache directory:

Kotlin

private fun getTempFile(context: Context, url: String): File? = Uri.parse(url)?.lastPathSegment?.let { filename -> File.createTempFile(filename, null, context.cacheDir) }

Java

private File getTempFile(Context context, String url) { File file; try { String fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir()); } catch (IOException e) { // Error while creating file } return file; }

Tip: If you need to package a file in your app that is accessible at install time, save the file in your project"s res/raw/ directory. You can open these files with , passing the R.raw. filename resource ID. This method returns an that you can use to read the file. You cannot write to the original file.

Open a directory

You can open a directory on the internal file system with the following methods:

Returns a representing the directory on the file system that"s uniquely associated with your app. Creates a new directory (or opens an existing directory) within your app"s unique file system directory. This new directory appears inside the directory provided by . Returns a representing the cache directory on the file system that"s uniquely associated with your app. This directory is meant for temporary files, and it should be cleaned up regularly. The system may delete files there if it runs low on disk space, so make sure you check for the existence of your cache files before reading them.

To create a new file in one of these directories, you can use the constructor, passing the object provided by one of the above methods that specifies your internal storage directory. For example:

Kotlin

val directory = context.filesDir val file = File(directory, filename)

Java

File directory = context.getFilesDir(); File file = new File(directory, filename);

Save a file on external storage

Using the external storage is great for files that you want to share with other apps or allow the user to access with a computer.

Request external storage permissions

To write to the public external storage, you must request the permission in your :

... ...

Beginning with Android 4.4 (API level 19), reading or writing files in your app"s private external storage directory-accessed using -does not require the or permissions. So if your app supports Android 4.3 (API level 18) and lower, and you want to access only the private external storage directory, you should declare that the permission be requested only on the lower versions of Android by adding the attribute:

...

Verify that external storage is available

Because the external storage might be unavailable—such as when the user has mounted the storage to a PC or has removed the SD card that provides the external storage—you should always verify that the volume is available before accessing it. You can query the external storage state by calling . If the returned state is , then you can read and write your files. If it"s , you can only read the files.

For example, the following methods are useful to determine the storage availability:

Kotlin

/* Checks if external storage is available for read and write */ fun isExternalStorageWritable(): Boolean { return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED } /* Checks if external storage is available to at least read */ fun isExternalStorageReadable(): Boolean { return Environment.getExternalStorageState() in setOf(Environment.MEDIA_MOUNTED, Environment.MEDIA_MOUNTED_READ_ONLY) }

Java

/* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; }

Save to a public directory

If you want to save public files on the external storage, use the method to get a representing the appropriate directory on the external storage. The method takes an argument specifying the type of file you want to save so that they can be logically organized with other public files, such as or . For example:

Kotlin

fun getPublicAlbumStorageDir(albumName: String): File? { // Get the directory for the user"s public pictures directory. val file = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName) if (!file?.mkdirs()) { Log.e(LOG_TAG, "Directory not created") } return file }

Java

public File getPublicAlbumStorageDir(String albumName) { // Get the directory for the user"s public pictures directory. File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }

If you want to hide your files from the Media Scanner, include an empty file named .nomedia in your external files directory (note the dot prefix in the filename). This prevents media scanner from reading your media files and providing them to other apps through the content provider.

Save to a private directory

If you want to save files on external storage that are private to your app and not accessible by the content provider, you can acquire a directory that"s used by only your app by calling and passing it a name indicating the type of directory you"d like. Each directory created this way is added to a parent directory that encapsulates all your app"s external storage files, which the system deletes when the user uninstalls your app.

Caution: Files on external storage are not always accessible , because users can mount the external storage to a computer for use as a storage device. So if you need to store files that are critical to your app"s functionality, you should instead store them on .

For example, here"s a method you can use to create a directory for an individual photo album:

Kotlin

fun getPrivateAlbumStorageDir(context: Context, albumName: String): File? { // Get the directory for the app"s private pictures directory. val file = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName) if (!file?.mkdirs()) { Log.e(LOG_TAG, "Directory not created") } return file }

Java

public File getPrivateAlbumStorageDir(Context context, String albumName) { // Get the directory for the app"s private pictures directory. File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }

If none of the pre-defined sub-directory names suit your files, you can instead call and pass null . This returns the root directory for your app"s private directory on the external storage.

Kotlin

myFile.delete()

Java

myFile.delete();

If the file is saved on internal storage, you can also ask the to locate and delete a file by calling :

Kotlin

myContext.deleteFile(fileName)

Java

myContext.deleteFile(fileName);

Note: When the user uninstalls your app, the Android system deletes the following:

  • All files you saved on internal storage.
  • All files you saved external storage using .

However, you should manually delete all cached files created with on a regular basis and also regularly delete other files you no longer need.

Предположим, что у вас на компьютере хранятся файлы и папки, к которым хорошо бы иметь доступ всегда и везде, т.е. – открыть и посмотреть, а также иметь возможность скачать и отредактировать их с любого устройства (планшет, смартфон, другой компьютер) и из любой точки, где вы можете выйти в интернет.
Всё это очень удобно когда вы регулярно обращаетесь к каким-то заметкам, таблицам, текстам. Находитесь вы, например, в дороге или в любом месте, где не можете сесть за свой компьютер. А доступ к некоторым файлам вам нужен прямо сейчас чтобы просто посмотреть какую-то информацию или возможно внести срочно небольшие изменения, пока вы про это не забыли. В таких случаях вы сможете всегда иметь доступ к нужным вам файлам если загрузите их на специальные бесплатные онлайн-хранилища (диски). Основные из них: Яндекс-Диск, Облако Mail, Google-Диск, Microsoft OneDrive и Mega. Файлы будут храниться в интернете в защищённом пространстве под вашим паролем, и открыть их можно с любого устройства и из любой точки при помощи бесплатных приложений! Нужна лишь возможность выхода в интернет. Да, и ещё один важный момент. Хранение файлов в онлайн-хранилищах защитит вас от потери данных, в случае если с вашим компьютером что-то случится.

К примеру – сломался жёсткий диск, украли и так далее. Ведь все важные данные будут храниться одновременно в защищённых хранилищах в интернете, откуда вы сможете их беспрепятственно восстановить.

В предыдущей статье я рассказывал о полноценном удалённом доступе к компьютеру с любого другого устройства и возможно кто-то подумает: «А почему бы не воспользоваться тогда просто удалённым доступом?». В таком случае данный вариант не эффективен и гораздо менее удобен по следующим причинам:

    Во-первых, ваш компьютер, к которому вы хотите подключиться должен быть всегда включён, либо иметь возможность включения по сети;

    Во-вторых, нам ведь нужно всего лишь посмотреть / отредактировать несколько файлов, а не иметь доступ ко сразу ко всем программам на компьютере.

    В третьих, полный удалённый доступ к компьютеру с нужными вам данными будет потреблять больше интернет-трафика и требовать достаточно высокой скорости Интернет-соединения.

Удалённый доступ к компьютеру нужен не для таких целей, а тогда, когда вам может понадобиться вход в какую-то программу на компьютере, произвести какие-то настройки.

По сравнению с удалённым доступом, для работы с файлами в онлайн-хранилищах вам понадобится пройти лишь несколько простых шагов:

    Зарегистрироваться в нужных онлайн-хранилищах (лучше во всех основных), ведь это бесплатно!

    Загрузить туда необходимые файлы, к которым вы хотели бы иметь доступ всегда и везде;

    Подключиться к хранилищу удалённо с любого устройства при помощи специального приложения для смартфона, планшета или компьютера. Вот и всё! Вы уже будете иметь доступ к загруженным документам.
    Подключиться к хранилищу можно и вовсе без приложения, просто войдя в нужный сервис по ссылке через браузер.

Но не всё же так идеально... Есть, конечно же, одно важное ограничение. Заключается оно в максимальном объёме хранимой информации на каждом из онлайн-дисков. Оно, понятное дело, не бесконечное и, как правило, рассчитано на хранение самых основных данных. Если нужно больше – нужно платить за дополнительное свободное место, либо воспользоваться различными акциями или реферальной программой, если таковые вообще имеются в нужном сервисе.

Рассмотрим основные сервисы для удалённого хранения файлов и сравним их

    Яндекс-Диск .
    Объём диска, доступный по умолчанию при бесплатной регистрации – 10 Гб. Также возможно получить 10 Гб за приглашение друзей (реферальная программа): 512 Мб за каждого приглашённого.
    Также возможно получить дополнительное место по текущим акциям, например – 50 Гб тем, кто купит смартфон / планшет / ноутбук определённой модели. За акциями нужно следить, поскольку одни заканчиваются, другие начинаются:)

    Ну и последний вариант расширения дискового пространства на Яндексе – это покупка нужного объёма.

    Вот возможные варианты расширения свободного места на Яндекс-Диске:

    Для сравнения цен на покупку дополнительного свободного места, возьмём объём, равный 1 терабайту (1 Тб = 1024 Гб).

    Цена 1 Тб на Яндексе, как видим из изображения выше, равна 900 рублей в месяц.

    Яндекс-Диск

    Google-Диск .
    Объём диска по умолчанию – 15 Гб. Расширение объёма за счёт различных акций и партнёрской программы не предусмотрено.
    Расширить диск возможно только заплатив за месяц или год, выбрав нужный объём.

    Вот какие условия нам предлагает Google-Диск:

    Цена за 1 Тб равна 9.99$. Если переведём в рубли (возьмём курс доллара на 15.10.2014 = 40.5 рублей), то видим сразу что на Google цена значительно выгоднее, чем на Яндексе. 9.99 x 40.5 = примерно 404.6 рублей, вместо 900 руб.

    Google-Диск

    Mail-Диск .
    Объём диска по умолчанию – целых 100 Гб. Разница по сравнению с Яндекс и Google приличная, как видите:) Тут всё просто и о каких-либо возможностях бесплатного и даже платного расширения дискового пространства речи на официальном сайте не идёт. Я думаю, 100 Гб халявного места никому не помешает, даже если больше заказать нельзя:)

    Но есть один минус – сервис Мэйла не всегда стабилен. Вот вам, как пример:

    Буквально на днях, при попытке зайти в свой аккаунт Mail в районе 1:00 по МСК, он ни в какую не принимал мой логин и пароль, говоря, что я ввожу неверные данные. Логины и пароли у меня автоматически сохраняются в программе RoboForm (прочитать о ней можно ), а также через неё автоматом заполняются и формы авторизации. И поэтому забыть их я никак не мог и ошибиться при вводе тоже. После нескольких безуспешных попыток войти, я попробовал восстановить пароль, и что вы думаете? :) Прислали новый пароль и с ним мне тоже войти не удалось. Немного разозлился и бросил это дело. Попробовал снова не следующий день и успешно вошёл с первого раза. Хотя бы даже поэтому сервисы Мэйла нельзя назвать очень стабильными:)

    Облако Mail

    Microsoft OneDrive .
    Объём бесплатного свободного пространства после регистрации составляет 15 Гб. Как и в Яндексе, имеется возможность бесплатно расширить объём до 23 Гб. 3 Гб сервис даст за создание резервной копии фотографий с камеры и ещё +0.5 Гб за каждого приглашённого участника по реферальной программе. Максимум – 10 приглашённых, что увеличит ваш объём ещё на 5 Гб:

    Что касается приобретения свободного места за плату, то тут Microsoft предлагает вот такие варианты:

    Т.е. стоимость 1 Тб свободного места + офисный пакет (Office 365) для всех устройств обойдутся нам всего в 199 рублей. Правда, вероятно, такое предложение ограниченно каким-то промежутком времени.

    onedrive

    Mega .
    Объём свободного пространства, предоставляемого бесплатно равен 50 Гб. Расширить свободное место можно только за деньги.

    На сайте указана цена за 2 Тб = 19.99 евро. Рассчитаем по сегодняшнему курсу: 1 евро = 51.5 руб. Итого за 2 Тб с нас берут около 1029.5 рублей. Делим на 2 и получаем для сравнения примерную стоимость 1 Тб равную 515 руб.

    Это чуть дороже, чем на Google и всё равно значительно меньше, чем на дорогом Яндексе, где берут 900 рублей за терабайт:)

    Да и тем более при оплате сразу за год получаем скидки.

    При всём этом сервис стабилен и удобен, замечаний у меня лично к нему пока не было…

    Mega

Эти 5 перечисленных выше онлайн-сервисов для хранения данных я, пожалуй, подчеркну как основные. Для каждого из них есть специальная программа для компьютера и мобильные приложения для Androind, iOS. При помощи этих программ работать с онлайн-дисками очень удобно, где бы вы ни находились.

Как видно, основное и главное отличие всех этих сервисов – доступный объём диска после регистрации.

Почему выделил именно эти сервисы? Главная причина как раз – объём свободного места, который предоставляется бесплатно. В них он вполне хороший. Даже на Яндексе, где бесплатно даётся объём в 10 Гб, можно его расширить до 20 Гб бесплатно, приглашая участников. Ну а в оставшихся трёх начальный объём итак выше:) У Мэйла он самый большой, но стабильность хромает…

Есть, конечно, ещё и другие облачные хранилища, но объём свободного места, предоставляемого бесплатно в них совсем невелик. Например, в Dropbox предоставляют всего 2 Гб бесплатно. Зачем нам такой объём маленький объём, если можно воспользоваться сразу 5-ю сервисами, о которых я выше писал, не так ли? Причём можно сделать в некоторых случаях и по 2 и более аккаунта в нужном облачном сервисе.

Я рекомендую регистрироваться во всех перечисленных сервисах, ведь это бесплатно! Свободного пространства для хранения данных никогда не бывает много. Не умещается всё на одном, распределяете ещё на другие и, думаю, объёма по умолчанию, если просуммировать все 5 сервисов, хватит всем вполне:)

А о том, как пользоваться рассмотренными выше облачными сервисами для хранения данных пойдёт речь в моей следующей серии статей, которая уже сейчас в процессе написания. Просто информации по рассматриваемому вопросу очень много...

Ну а сейчас на этом всё… Прощаюсь с Вами на неделю;) Пока!

Мое приложение хранит файлы во внутреннем каталоге хранилища (/Android/data/com.mycompany.myapp/files, как было возвращено getFilesDir()), и я хотел бы разрешить пользователям обращаться к этим файлам непосредственно из управления файлами приложение на своем мобильном устройстве или приложение Android File Transfer для рабочего стола.

2 ответов

Я более подробно рассмотрел результат getFilesDir() vs getExternalFilesDir() и обнаружил, что getFilesDir() возвращает /data/data//files , а getExternalFilesDir() возвращает /Android/data//files . Я думал, что файлы приложений, которые я просматривал в /Android/data , были внутренними каталогами хранилища, но теперь я вижу, что это фактически внешние каталоги хранения.

Если внутренние папки хранения никогда не доступны для обычных пользователей, я хочу, чтобы в документации говорилось, что вместо того, чтобы говорить, что они недоступны "по умолчанию". По крайней мере, для меня, говоря "по умолчанию", подразумевается, что поведение по умолчанию может быть изменено.

В любом случае, я протестировал и подтвердил, что если я удалю свое приложение, файлы, сохраненные в getExternalFilesDir() , будут удалены автоматически. Таким образом, это соответствует моей потребности в местоположении хранилища, которое явно связано с приложением (использует имя конкретного приложения и удаляется с помощью приложения), но доступно пользователям для случайного ручного управления файлами.

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

Я думаю, что вы запутались в документации разработчиков, я не могу вас обвинить, это не лучшая документация, которую я когда-либо читал. В любом случае, Android предоставляет два способа сохранения файлов в файловой системе:

  • Использование внутреннего хранилища
  • Использование внешнего хранилища

Внутреннее хранилище ВСЕГДА доступно и доступно ТОЛЬКО вашему приложению, никакое другое приложение в системе не может получить доступ к файлам, сохраненным в этом разделе.

Теперь я думаю, что вам нужно Внешнее хранилище , потому что оно "доступно для чтения" и доступно любому пользователю и любым приложениям. Недостатком является то, что он может быть недоступен, так как пользователь может установить его на USB-устройство, которое может быть удалено пользователем в любое время.

Вы не должны использовать ни MODE_WORLD_WRITEABLE , ни MODE_WORLD_READABLE , как указано в документации, потому что это очень опасно. Кроме того, эти константы устарели, поскольку уровень API 17

Если вам нужно сделать ваши файлы общедоступными, сохраните их в Внешнем хранилище . Вам нужно будет объявить разрешение в вашем файле манифеста, чтобы избежать сбоя приложения при каждом доступе к Внешнему хранилищу ...

поскольку Внешнее хранилище может быть недоступно, вам нужно будет определить его состояние перед выполнением какой-либо операции, иначе ваше приложение выйдет из строя...

Public enum StorageState{ NOT_AVAILABLE, WRITEABLE, READ_ONLY } public StorageState getExternalStorageState() { StorageState result = StorageState.NOT_AVAILABLE; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return StorageState.WRITEABLE; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return StorageState.READ_ONLY; } return result; }

Более подробная информация о документации и вещах, о которых вы должны знать. Например, вы можете предоставить владельцам своих файлов эти файлы, чтобы при удалении приложения система могла автоматически удалять эти файлы. Для получения дополнительной информации см. Документацию на сайте разработчиков Android

поделиться

С ростом мегапикселей фото- и видеокамер проблема хранения домашнего медиаконтента все чаще возникает у большого числа пользователей ПК. Конечно, жесткие диски стоят сегодня не так уж и дорого, а их объем исчисляется терабайтами, но и этого бывает мало.

Вариантов расширения емкости доступного дискового пространства существует несколько. Если у вас обычный «большой» компьютер, то самый простой из них - установка в него новых винчестеров. Более универсальный способ - использование внешних дисков. Однако наиболее удобным (и дорогим) будет установка в домашней локальной сети сетевого накопителя.

Он позволит вам иметь постоянный доступ с любого ПК или плеера ко всей медиабиблиотеке, хранить резервные копии документов и системных разделов компьютеров, обмениваться файлами через интернет без участия ПК и многое другое. Кроме того, эти устройства отличает небольшой (по сравнению с ПК) размер и низкий уровень энергопотребления и шума. Так что если у вас не коттедж с парой подсобных помещений, то компактный сетевой накопитель может быть очень удачным выбором. Кстати, есть даже модели для 2,5-дюймовых винчестеров.

Поскольку наша сеть уже включает роутер , то достаточно только подобрать нужную модель NAS и подключить ее к сети. Для начинающих пользователей, которые не уверены в необходимости десятков терабайт, лучше всего посмотреть на устройства с установкой одного или двух винчестеров. Они сегодня наиболее оптимальны для домашнего использования. А если не будет хватать места - к ним можно будет подключить внешние USB- или eSATA-диски. Если же вы уже заранее понимаете, что пары дисков точно не хватит - есть модели на 4, 5, 6 и более дисков. Правда, их стоимость относительно велика. Большинство устройств продаются без винчестеров, так что их надо будет приобретать отдельно. Для справки лучше всего ориентироваться на списки совместимости производителей. Гнаться за самыми быстрыми винчестерами в данном случае нет смысла. Лучше подбирать их по низкому уровню энергопотребления, нагрева и шума.

Стоит также упомянуть о возможности использования в качестве NAS отдельного выделенного обычного ПК. Но в этом материале речь будет идти именно о готовых сетевых накопителях.

К сети практически все устройства подключаются по гигабитному соединению, поскольку 10-12 МБ/с, которые обеспечивает FastEthernet, по плечу уже самым простым моделям и сегодня смотрятся совсем несерьезно.

В качестве встроенной операционной системы обычно используется Linux, но встречаются варианты и с Windows Home Server. Во втором случае сервер практически не отличается от домашнего ПК, только общение с ним происходит исключительно по сети. WHS снабжена качественной документацией и многочисленными «помощниками», так что разобраться будет несложно. Большинство информации далее в этой статье к этому варианту не относится.

Если вас пугает общение с Linux, то на самом деле ничего сложного в данном случае нет - пользователю доступен удобный web-интерфейс, через который можно настроить все нужные параметры и функции. Но если добраться до командной строки - то можно будет работать с устройством практически как с обычным компьютером.

Кроме операционной системы, есть также смысл обратить внимание на возможности устройства. В настоящее время кроме обычного хранения файлов сетевые накопители предоставляют сервисы медиасервера, загрузки файлов, удаленного доступа и другие.

Что касается аппаратной платформы и производительности, то модели на x86-совместимых процессорах относятся к наиболее производительному (и дорогому) сегменту, в центре выступают ARM-процессоры с частотой 1000-1600 МГц, а замыкают линейку обычно младшие ARM. В реальности стоит смотреть не на саму платформу, а результаты ее конкретной реализации, поскольку оптимизацией программной оболочки можно многого достичь.

От объема оперативной памяти зависит эффективность работы дополнительных сервисов, так что мы бы рекомендовали выбирать устройства с 256 МБ или выше, если планируется использовать не только сетевой доступ к файлам. Хотя и для первого ознакомления вполне достаточно и 64 или 128 МБ. Только не ждите от них слишком многого.

В этот раз мы используем модель DS210+ одного из наиболее популярных производителей данного сегмента рынка - компании Synologу. Это двухдисковое устройство, кроме реализации сервисов сетевого хранения файлов, имеет и множество дополнительных функций и может быть очень полезным как для домашнего использования, так и в офисах.

Нужно отметить, что обычно у всех производителей возможности прошивок практически одинаковы для всех моделей линейки и обновляются одновременно. Более полно познакомиться с устройствами Synology можно в недавнем обзоре DS710+ .

Сборка

Чаще всего сетевые накопители продаются без винчестеров и пользователю нужно их приобрести и установить самостоятельно. Ничего сложного здесь нет - открываете корпус или вытаскиваете рамки, прикручиваете диски на место и собираете конструкцию.

Единственное замечание здесь - желательно предварительно убедиться, что на винчестерах нет никакой информации и таблица разделов пуста. Иначе могут быть ошибки при инсталляции прошивки. Также не забываем, что все модели сетевых накопителей для своих внутренних дисков в обязательном порядке требуют переформатирования и просто установить существующие диски с сохранением данных не получится.

Установка прошивки

После этого обычно необходимо пройти этап установки встроенного программного обеспечения в NAS. Делается это с использованием комплектной утилиты, в нашем случае Synology Assistant. И прошивку, и программу лучше всего скачать с сайта производителя. Так вы будете уверены, что используются самые последние версии. Но можно и просто вставить в привод ПК комплектный оптический диск - вся нужная информация записана и на нем. Если накопитель поставлялся с винчестерами, то прошивка в нем уже стоит и этот этап можно пропустить.

Сетевые настройки

В большинстве случаев никаких специальных сетевых настроек на накопителе делать не требуется. Адреса он получает от роутера по DHCP, имя часто подходит предложенное производителем. Но при необходимости (например, если вам хочется указать новое имя или запретить доступ накопителя в интернет, удалив из параметров адрес маршрутизатора по умолчанию), можно воспользоваться страничкой «Панель управления - Сеть». Кроме того, здесь можно включить поддержку Jumbo Frames.

Выбор конфигурации дисков

После установки прошивки необходимо выбрать конфигурацию жестких дисков (в некоторых случаях она создается одновременно с установкой прошивки). Если их более одного, то можно выбрать один из вариантов RAID-массивов. Краткие сравнительные характеристики основных из них указаны в таблице. В формуле объема N - число дисков, S - объем одного из них (подразумевается, что диски одинаковые, в большинстве случаев это необходимо для оптимальной работы).

Режим Число дисков Общий объем Плюсы Минусы
Отдельные диски (Basic) 1 S Максимальная независимость Нет отказоустойчивости, нет возможности объединения дисков
JBOD 2 и более S×N Единый массив максимального объема
RAID0 2 и более S×N Максимальная скорость При отказе одного диска теряется вся информация
RAID1 2 S Малый полезный объем
RAID5 3 и более S×(N−1) Отказоустойчивость к потере одного диска Требуется 3 диска и более, невысокая скорость записи на слабых системах

Некоторые производители, в частности рассматриваемый здесь Synology, предоставляют собственные реализации RAID с упрощенной конфигурацией - когда для расширения массива достаточно только добавить диски или поменять его на более емкий.

Большинство моделей позволяют создавать сразу несколько массивов, а ограничением служит только число дисков. Например, если их четыре, то можно сделать из двух зеркало RAID1, а вторую пару собрать в RAID0.

Обратите внимание, что собственно прошивка устанавливается на каждый из дисков, это позволяет повысить отказоустойчивость и реализовать возможность по миграции и расширению массивов без потери данных методом последовательной замены дисков в RAID1/RAID5.

Кроме системного раздела, обычно есть и раздел подкачки, так что общий полезный пользователю объем получается несколько меньше. Но потеря 2-4 ГБ на дисках в 1 ТБ - не очень существенна.

Для форматирования винчестеров нужно сначала попасть в web-интерфейс устройства. Это можно сделать из Synology Assistant или просто открыв в браузере адрес/имя накопителя. После ввода имени и пароля вы получите доступ к настройкам.

Далее переходим к настройке дисковых томов. Если у вас один винчестер, то вариант тут тоже только один - «Basic», точнее есть еще «Synology Hybrid Raid», который автоматически выбирает наиболее удобную конфигурацию дисков и позволяет легко добавлять новые диски без потери информации. Для рассматриваемой двухдисковой модели он несколько избыточен. Так что если ставите два диска, то лучше выбрать классические JBOD - объединение двух дисков в один большой том, RAID0 - массив с чередованием для объединения в один том и увеличения производительности или RAID1 - два диска являются зеркальными копиями друг друга, обеспечивая отказоустойчивость к неисправности одного из них, правда полезный объем в этом случае равен одному диску. Иногда лучше даже просто сделать два независимых «Basic» тома, а для важных данных настроить автоматическое резервирование с одного диска на второй.

В последних версиях прошивок Synology появилась возможность деления каждого диска на несколько частей и организация массивов уже из них. Это существенно повышает гибкость конфигурации. Поскольку у других производителей такой возможности (пока?) нет, то сделаем все по старинке - один диск в один том.

На последнем шаге устройство предложит полностью просканировать массив на плохие блоки после создания. Несмотря на то, что современные винчестеры отличаются исключительной надежностью, лучше от этого не отказываться.

Создание общих ресурсов и определение прав

Следующим этапом после создания дискового тома будет программирование пользователей системы. Конечно, можно попробовать работать исключительно под аккаунтом администратора, но это не очень удобно. Второй крайностью будет разрешение гостевого доступа, так что никакой проверки проводиться не будет совсем. Но мы бы все-таки рекомендовали даже для дома и простой сети использовать «полную версию» - с именами и контролем доступа.

Самым удобным вариантом будет использование логинов и паролей, полностью совпадающих с учетными записями в Windows. Это исключит лишние запросы при обращении к сетевым ресурсам. Также будет полезным создать пользователей например для медиаплееров, так что им можно было выделить права «только чтение» на некоторые ресурсы чтобы избежать рисков потери данных. И не забудьте поменять пароль администратора сетевого накопителя.

Если пользователей много, можно также использовать организацию групп для более простого управления правами. Для дома это обычно избыточно.

Права пользователям выдаются не целиком на созданный дисковый том, а на общие папки, расположенные на нем. Так что и их тоже надо запрограммировать. В некоторых случаях они автоматически появляются после создания тома или включения некоторых сервисов (например медиаплеера).

В нашем случае мы сделаем папку public и назначим для нее права нашим пользователям.

Доступ к накопителю с ПК

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

Вспомним немного практических особенностей сетей Windows. Основной современный сетевой протокол - TCP/IP - позволяет участникам только обмениваться пакетами. Так, для реализации различных сервисов поверх него нужно использовать протоколы более высокого уровня. Не вдаваясь в подробности - «Сеть»/«Сетевое окружение» в Windows, CIFS, SMB, SAMBA - все это означает возможность обмена файлами между сетевыми устройствами и сетевую печать. Реализация этого протокола возможна не только на Windows ПК, но и, например, медиаплеерах, телевизорах, спутниковых ресиверах, IP-видеокамерах и, конечно, других ОС, например Linux или Mac OS (аналогичный «стандартный/общий» протокол для этой ОС называется AFP). В большинстве случаев эти протоколы работают только в локальном сегменте вашей домашней сети.

Для доступа к ресурсу нужно знать имя сервера и имя общей папки на нем. В «Проводнике» Windows достаточно написать в строке адреса «\ServerFolder» - и вы попадаете в папку Folder, расположенную на сервере Server. В нашем случае нужно писать «\DiskStationpublic». Если ваше имя и пароль пользователя в Windows записаны в NAS и права на эту папку у вас есть (или включен гостевой доступ) - то вы увидите ее содержимое, если же нет - то сервер запросит имя и пароль. Обратите внимание, что в сети Windows на разные ресурсы одного сервера в один момент времени можно обращаться только с одним именем и паролем.

Часто удобно иметь постоянно подключенные локальные «буквы» для доступа к сетевым ресурсам. Это тоже сделать несложно - открываете в проводнике «\DiskStation», на иконке «public» нажимаете левую кнопку мышки и выбираете «Подключить». При наличии галочки в окне «Восстанавливать при входе в систему» - у вас всегда на выбранной букве будет доступ к этой общей папке (в случае, если накопитель, разумеется, включен). Кстати, для этой операции можно использовать и Synology Assistant.

Дополнительные настройки NAS

Коротко опишем, какие еще действия стоит предпринять после первого запуска сетевого накопителя.

Может так оказаться, что в вашей домашней сети используется имя рабочей группы, отличное от классического «WORKGROUP». Тогда желательно и у сетевого накопителя его изменить. Делается это в настройках протокола Windows - «Панель управления - Win/Mac/NFS». Если сетевой накопитель - единственное постоянно работающее устройство, то можно активировать на нем функцию «Local Master Browser», которая повысит стабильность работы сетевого окружения Windows. По имени или IP-адресу устройства можно найти всегда, но вот собственно их список в окне «Сеть» может иногда быть неполным.

Если планируется предоставлять доступ к NAS из сети Интернет, то желательно включить автоматическую блокировку при попытке подбора пароля. Это позволит вам не опасаться атак начинающих хакеров.

Также обязательно нужно включить доступ к web-интерфейсу по шифрованному протоколу HTTPS, причем желательно даже указать обязательность его использования. Делается это на вкладке «Панель управления - Настройки DSM».

Обратите внимание, что большинство современных браузеров при работе с HTTPS скорее всего будет «ругаться» на сетевой накопитель. Дело в том, что сертификат SSL, который он использует, является «самоподписанным», то есть проверить его происхождение через мировые центры сертификации невозможно. Обычно в этом случае браузер предложит вам включить данный сервер в список «доверенных» самостоятельно. Для работы в коммерческом сегменте вы можете инсталлировать в сетевой накопитель сертификат, официально полученный от доверенного центра.

Как и роутер, сетевой накопитель умеет отправлять сообщения по электронной почте в случае возникновения проблем. Использовать эту опцию можно со многими общедоступными почтовыми сервисами, которые поддерживают SMTP.

У большинства устройств есть опции по управлению питанием - например, отключению винчестеров в случае отсутствия активности или даже программирование расписания работы. Споры о том, какой режим работы - постоянный или с отключениями - более «полезен» для винчестера, не утихают до сих пор. Однозначного совета тут дать нельзя. Мы бы рекомендовали смотреть по ситуации - если накопитель используется более чем пару раз в сутки, лучше оставить диски включенными. В реальности современные диски очень надежные и если их не ронять во включенном состоянии, служат очень долго и по времени, и по циклам включения/выключения.

Кстати, для повышения надежности очень советуем подключать сетевой накопитель (да и другое оборудование тоже) через источник бесперебойного питания. Выбрать его модель можно по спискам совместимости NAS, тогда при соединении устройств по USB, ИБП сможет сообщить накопителю о проблемах и при необходимости безопасно выключить его.

Доступ к файлам из интернета

В качестве упражнения по совместному использованию роутера и NAS опишем один из вариантов организации полного и безопасного доступа к вашим файлам из сети Интернет.

У Synology есть для этого очень удобная возможность - встроенный файловый менеджер FileStation. Для него необходимо включить протокол HTTPS. Порт можно оставить по умолчанию 7001, но в случае, когда роутер не умеет работать с разными внешними и внутренними портами, лучше все-таки поменять на что-то менее «обычное».

Контроль прав пользователей у Synology касается и дополнительных сервисов, так что надо убедиться, что FileStation разрешен для нужных людей.

Следующие два действия проводится уже на роутере. Сначала мы назначаем на странице свойств сервера DHCP жесткую привязку MAC-адреса сетевого накопителя одному из IP-адресов диапазона локальной сети. Это позволит нам быть уверенными в том, что IP-адрес после перезагрузок не изменится.

Ну и последний штрих - назначение трансляции внешнего порта на FileStation. В нашем примере мы выбрали внешний порт 39456 и перевели его на внутренний 7001 на адрес 192.168.1.40 сетевого накопителя.

На этом настройка закончена. Теперь из любой точки интернета вы можете обратиться к своим файлам через браузер, набрав в строке адреса ссылку «https://myhost.homedns.org:39456» (адрес взят в качестве примера из прошлой статьи) и указав имя и пароль пользователя

В следующем материале мы рассмотрим работу с дополнительными сервисами сетевого накопителя.

Последнее обновление: 21.03.2017

В прошлой теме мы рассмотрели сохранение и чтение файлов из каталога приложения. По умолчанию такие файлы доступны только самому приложения. Однако мы можем помещать и работать с файлами из внешнего хранилища. Это также позволит другим программам открывать данные файлы и при необходимости изменять.

Весь механизм работы с файлами будет таким же, как и при работе с хранилищем приложения. Ключевым отличием здесь будет получение и использование пути к внешнему хранилищу через метод Environment.getExternalStorageDirectory()

Итак, пусть в файле activity_main.xml будет такая же разметка интерфейса:

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то