Ответы пользователя по тегу Хранение данных
  • Можно ли ускорить запись на ZFS через кэш?

    @rPman
    Zfs не умеет кешировать записи.

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

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

    Торренты лучше кешировать средствами клиента, например это умеет tixati, опция move on complete
    Ответ написан
    1 комментарий
  • Как проверить 500 000 файлов word,exel,pdf ,txt что они не битые?

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

    Так же можно делать все то же самое из любого другого языка программирования, я помню делал что то похожее на c# в visual studio, это удобнее чем писать на vbscript.
    https://learn.microsoft.com/ru-ru/dotnet/csharp/ad...
    Ответ написан
    2 комментария
  • Куда класть soho/стартап бэкапы?

    @rPman
    Мне кажется вы перечислили самые дешёвые варианты, amazon s3 glacier deep будет тоже уровня цены.

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

    Не представляю что то дешевле чем хранить данные там (порядка 2..5$/м за терабайт +-)... Когда-то по тестам скорость там получалась сотни мегабит, но логично лучше тестировать в своей локации, это ведь как торренты.

    https://siascan.com/ смотреть на цену тут с осторожностью, так как могут не учесть x3 резервирование по умолчанию, лучше поставить клиент и смотреть цены там.
    Ответ написан
  • Скачанное видио не удаляется на телефоне, что делать?

    @rPman
    В галерее показаны иконки, так происходит, если файл удалить 'сторонними' средствами а иконки (это отдельные файлы, по уму лежат тут же но переименованные с точкой в имени в начале) нет.

    Достаточно удалить файл еще раз из галереи и он исчезнет.

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

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

    Удаленное управление.
    Дома или на сервере настраиваешь свое рабочее окружение, а затем подключаешься к терминалу этого сервера каким-либо инструментом удаленного управления. Для этого потребуется наличие интернета/подключения до сервера (вырожденный случай - сервер в багажнике автомобиля на парковке под окнами, связь по wifi).

    Если сервер linux и низкого качества связь - то настоятельно рекомендую x2go (нет нативного клиента только под смартфоны, и то можно использовать debia-no-root или аналоги)
    Если сервер windows и так же некачественная связь - rdp (с оговорками, нормальная версия сервера только в серверных ревизиях и при использовании серверного оборудования)

    Так же, при наличии широкого канала в десятки мегабит и низких пингах, есть реализации удаленного управления типа vnc/anydesk/teamviewer/rustdesk и особняком steam link (эта технология невероятно эффективно передает данные и в наличии реализации даже под очень слабое и почти не поддерживаемое железо (у меня есть старый планшет android с очень слабым процессором, на нем youtube работает но запускается по минуте, так вот только steam link как инструмент удаленного управления на нем работает без единого лага, запущенный youtube в браузере на компьютере транслируется без каких либо задержек и искажений картинки в гигабитной локальной сети)
    Ответ написан
    Комментировать
  • Как безопасно заливать файлы на свой сервер с других компов извне?

    @rPman
    Достаточно открыть ssh доступ (можно сменить порт с дефолтного 22 на что то другое, меньше будут беспокоить сканеры ботов), все остальное (большая часть инструментов) будут работать через него.

    scp - штатный от ssh, возможности как у обычного cp, не возобновляет прерванное копирование
    rsync - умеет работать через ssh, ключ --partial автоматически дозагрузит прерванное копирование, простой скрипт будет перезапускать процесс копирования пока он не завешится корректно
    while ! rsync -avz --partial --progress --inplace --append-verify --rsh=ssh /путь/к/локальному/файлу пользователь@удаленный_хост:/путь/к/удаленному/файлу; do
      echo "Переподключение через 10 секунд..."
      sleep 10
    done
    Ответ написан
    Комментировать
  • Каким образом и где можно разместить аудиофайл с расширением mp3 чтобы доступ на прослушивание к нему был, но возможность скачивания не была доступна?

    @rPman
    Браузеры поддерживают проигрывание DRM контента, это не дает 100% гарантию но создает некоторые трудности для скачивания
    p.s. я не нашел красивого примера, стандарты на это дело еще не стабилизировались

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

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

    Ну и само собой, даже DRM защищенный контент можно будет записать, запустив браузер в виртуальной машине.
    Ответ написан
    Комментировать
  • Как создать хранилище с raid 1?

    @rPman
    raid бывают разные, под разные задачи. И да, резервировать данные можно и без raid, например простым копированием.

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

    Для защиты от большинства проблем нужны инкрементальные бакапы с ограниченным доступом (т.е. к бакапам должен быть доступ только на чтение, кроме единственного приложения - которое делает эти бакапы).

    Теперь как - не важно, постоянно включен у тебя массив или эпизодически, делать его можно одинаково. Либо с помощью аппаратного контроллера (или целого nas или устройства в компютер raid controller), либо с помощью програмной настройки ОС

    В windows это можно сделать в свойства мой компьютер - управление компьютером - управление дисками - создать динамические тома (при их инициализации или конвертировать), можно делать сразу на основе целого диска или разделах (на разных дисках разделы должны быть одинакового размера). К сожалению майкрософт сильно ограничивает создание таких дисков, если они подключены по usb, т.е. это возможно и должно работать но почти наверняка штатно из gui создать не получится... но есть консольная gparted.

    В linux есть mdadm либо специализированные файловые системы типа btrfs или zfs.

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

    p.s. постоянное включение/выключение hdd вредит ему сильнее чем постоянная работа.
    Ответ написан
    2 комментария
  • Windows файловые системы с проверкой целостности для raid?

    @rPman
    Программный raid в windows работают только в блочном режиме, т.е. контроль целостности проходит до файловой системы. Собственно нет никакой разницы какая там будет файловая система (допустимо к примеру создание рейда и проброс полученного диска в виртуалку хоть с linux)

    Хз как тот проект zfsin я про него впервые слышу, а так да zfs и btrfs это две файловые системы из *nix-like систем (solaris и linux соответственно) которые умеют raid функционал на файловом уровне. Не советую использовать это в windows.
    Ответ написан
  • Как выбрать внешний SSD для долгосрочного хранения данных?

    @rPman
    Единственное достоинство для резервного копирования у ssd - это высокая скорость (если выбирать nvme) доходящяя до 5 гигабайт в секунду чтения и примерно в 8 раз медленнее запись (зависит от технологии, но те что быстрее - на порядок дороже).
    Чтобы получить такую же скорость на основе hdd, нужно городить raid0 (без резервирования) минимум из 10 дисков (скорость одного современного диска 150-300мбайт/сек, осторожно с дисками с черепичной записью, у них скорость записи падает в 10 раз по сравнению с чтением).

    Они дороже за гигабайт (особенно если выбирать серверные, надежные, с умным контроллером и какими то гарантиями), причем на порядок.

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

    Поэтому, единственное, зачем имеет смысл использовать ssd для резервного копирования - это вынужденная оперативность, когда нужно максимально быстро сделать резервную копию и продолжить работу. И в этом случае ssd можно использовать как временный буфер. И да, почти тот же функционал (возможность получить замороженное состояние данных чтобы была возможность копировать их на медленный носитель) можно получить программным способом, например с помощью снапшотов файловой системы или master-slave репликацией базы данных на слабую машину, с которой уже и снимаешь копию (это нужно если сам процесс резервной копии замедляет работу на столько, что это не приемлемо).

    Поэтому не советую покупать для задач резервного копирования ssd только потому что это 'модно молодежно'
    Ответ написан
    6 комментариев
  • Как лучше хранить много изображений для веб-приложения?

    @rPman
    Веб приложения максимально оптимизированы при работе с файлами на диске.
    Никакой другой метод не позволит дать такую производительность.

    Поэтому - авторизацию доступа делай на уровне веб сервера (вот пример с нормальным oauth)

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

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

    Тупой пример - числовой идентификатор переводи в hex, дели на группы по 4 символа и создавай соответствующие каталоги: /images/0d4f/3b00/a841/0d88, тут 0d88 это файл, остальные части - каталоги. Идентификатор соответственно 64-битное число 0x0d4f3b00a8410d88

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

    p.s. хранить большие бинарные блобы в базе данных можно только при очень большой нужде в транзакциях, и это очень дорого и по памяти и по процессору.
    Ответ написан
    2 комментария
  • Диск С полностью заполнен, как его можно очистить?

    @rPman
    утилита WinDirStat покажет куда делось место
    p.s. если у тебя миллионы файлов то возможно туда еще сотни мегабайт уйдет, каждый файл будет отнимать, помимо данных, еще на метаинформацию и выравнивание до размера кластера (обычно 4-8кб)
    Ответ написан
  • Какой способ хранения и выборки данных предпочтительней?

    @rPman
    Нужно разделять оптимизацию доступа к данным и их хранение.

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

    Один из способов - считать агрегированную информацию в триггере на изменение и добавление данных.

    Поэтому ответ на твой вопрос может стать - первый вариант, но исходные данные хранить в неагрегированном виде в любом случае.
    Ответ написан
    Комментировать
  • Есть диски, бывшие частью массива, как начать использовать?

    @rPman
    ты отключи сначала mdadm, он же монопольно держит диск и не отдает (но тогда должны были бы быть ошибки!)
    cat /proc/mdstat
    выдаст что то типа

    Personalities : [raid1] [raid6] [raid5] [raid4]
    md1 : active raid1 sdb2[1] sda2[0]
    136448 blocks [2/2] [UU]

    md2 : active raid1 sdb3[1] sda3[0]
    129596288 blocks [2/2] [UU]

    md3 : active raid5 sdl1[9] sdk1[8] sdj1[7] sdi1[6] sdh1[5] sdg1[4] sdf1[3] sde1[2] sdd1[1] sdc1[0]
    1318680576 blocks level 5, 1024k chunk, algorithm 2 [10/10] [UUUUUUUUUU]

    md0 : active raid1 sdb1[1] sda1[0]
    16787776 blocks [2/2] [UU]

    unused devices:

    определяешь какой из массивов из твоихдисков попытался построиться (но не смог скорее всего) и делаешь ему stop
    mdadm --stop /dev/md1

    и вот тогда уже манипулируешь с дисками и стираешь их
    Ответ написан
    Комментировать
  • Насколько можно доверять функции сканирования дисков Read/Write test на Infrotrend GS1012R2?

    @rPman
    Как и любой другой системе - с оговорками, если ошибка не обнаружена, не значит что ее нет, но совокупность действий, типа регулярные тесты и мониторинг smart значительно повышает вероятность не просто обнаружить проблему до того как она навредит, но и получить прогноз на будущий сбой (тоже кстати с некоторой вероятностью)
    Ответ написан
    Комментировать
  • Где хранить 1ТБ видео?

    @rPman
    Криптовалютные проекты, ориентированные на хранение типа siacoin (у кошелька готовый api плюс есть проекты позволяющие например fuse файловую систему на основе облачного хранилища), по цене хранения данных они вне конкуренции (но цены на выгрузку данных из облака высоки на столько что в итоге стоимость станет сравнима с классическими облачными сервисами)
    Ответ написан
    Комментировать
  • Какой сервис сейчас предоставляет много места за недорого?

    @rPman
    Cамое дешевое что я знаю - это криптовалютные проекты вида siacoin (цены в месяц за терабайт! отдельно за хранение, загрузку выгрузку)

    https://github.com/SiaFoundation штатный кошель работает как привычные google/microsoft/dropbox/... хранилища и имеет простой и удобный api, так же есть такое https://github.com/lukechampine/us

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

    Лично уже давно не пользовался filecoin, проект не мертв (сеть работает, хосты файлы хранят и раздают) но вся его сопроводиловка похоже народу надоела, сайты не работают и т.п.
    Ответ написан
    Комментировать
  • Что почитать про диски (HDD, SSD) и файловые системы, желательно какое-то системное описание?

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

    1. Случайный и многопоточный доступ - принципиальная необходимость задумываться об этом исходит из физической особенности накопителей, последовательный доступ от случайного (имеется в виду как у hdd так и у ssd (в меньшей степени, зависит от размера читаемого блока кластера, потребительскиее ssd это 256кб) значительно отличаются (на порядок или даже два) по времени. Аппаратные контроллеры на материнской плате и даже на диске (или драйвера и планировщик ос) могут физически считывать данных больше чем потребуется (read ahead), делая это фоном, после запроса и сохраняя в своей памяти.
    Если несколько приложений одновременно потребуют данные с разных областей устройства хранения, специальный планировщик ос может приостанавливать работу этих приложений, собирая как можно больше запросов на данные, сортируя их для оптимальной их обработки. Пользовательское приложение может делать это значительно эффективнее, если заранее озаботится о том, как именно данные будут храниться на диске (обычно речь идет о хранении данных минуя файловую систему).

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

    3. Кеширование (буферизирование) записи - приложение может управлять, стоит ли ждать окончания физической записи данных на диск или это можно сделать фоном или даже отложить на потом. Например fflush позволяет принудительно сбросить буфера при использовании fwrite (и других от stdlib), более низкоуровневые вызовы позволяют точнее управлять процессом. Помимо инструментов управления кешированием на уровне приложения есть способы настроить это на уровне ОС (например ext4 позволяет настроить стратегию записи data=writeback, это делает файловую систему уязвимой к сбоям но значительно ускоряет запись, так как даже fflush из приложения не будет ждать окончательной записи), так же разные сетевые файловые системы могут накладывать дополнительные ограничения (точно помню что nfs обрабатывает fwrite по другому в отличии от локальных записей, делая больше лишних действий на диске)

    p.s. про mmap, меанизмы ОС (как linux так и windows) позволяет вместо работы с файлом по кусочкам (fopen/fread/fwrite/...) 'замапить' указанный файл или даже раздел/диск на область памяти, при доступе к которой прозрачно будут совершаться чтения и записи на диск. Этот способ работы с файлами зачастую самый производительный (кстати по умолчанию используются на исполняемый файл приложения и .dll/.so) и очень часто еще и удобнее, так как кеширование данных будет произведено средствами ос, и при повторном запуске приложения данные уже будут в памяти (при обычном fopen их пришлось бы считывать в память, т.е. копировать что дает 2x накладные расходы на процессор).

    -------------

    4. Файловые системы это уровень абстракций ОС, значительно добавляет накладные расходы на работу с данными но за счет удобства (например возможность расширить хранилище без полного копирования данных, просто увеличив размер раздела или добавив новый накопитель, как это позволяют файловые системы - комбаины типа btrfs/zfs), разные файловые системы организуют хранение по разному, что значительно влияет на скорость как записи так и чтения.
    Например cow файловые системы (xfs/zfs/btrfs) каждое последующую запись делают последовательно, даже если записываемые чанки/кластеры принадлежат разным файлам, даже если это модификация а не добавление в конец, что благосклонно сказывается на скорость записи но отвратительно фрагментирует размещение файлов на диске (там есть механизмы борьбы с этим), т.е. для хранилище файлов разного размера, считываемых/изменяемых целиком такие файловые системы идеальны, но для баз данных наоборот очень неэффективны (в таких фс можно принудительно отключить cow для определенных файлов). btrfs/zfs за эти накладные расходы (незначительные) дают бонусом функционал быстрых снапшотов (почитай про btrfs snapshot incremental backup) и высокую устойчивость к сбоям.
    Еще пример, файловые системы, с целью защитить данные от сбоев, добавили к функционалу понятие журнал, промежуточное место, куда записываются данные (метаданные) до тех пор пока приложение не зафиксирует изменения (закрытие файла или fflush), в нормальных ОС существует возможность разместить этот журнал на отдельном, более быстром, накопителе (например ext3/ext4) или отключить полностью. Это позволяет заметно ускорить запись и не покупать на весь объем данных быстрый и дорогой накопитель.
    Было время, когда можно было буквально (кажется у xfs но я могу ошибаться) указать разные накопители для метаданных (информация о том как файл размещен на диске и информация о атрибутах файлов) и самих данных, что тоже в условиях значительного отличия скорости работы емких hdd и быстрых но не емких ssd, сэкономить на построении хранилища.

    5. Сжатие данных на лету - некоторые файловые системы позволяют прозрачно для приложений пропускать данные через библиотеку сжатия (в пределах кластера или даже нескольких соседних), например ntfs использует compress, а btrfs позволяет выбирать, например zstd (один из лучших по соотношений скорость/сжатие), было время когда включение сжатия на медленных накопителях давала двух-трех кратное ускорение скорости чтения практически бесплатно (а запись почти не замедлялась но повышалась нагрузка на процессор), на современных же накопителях процессор может не поспевать (но есть дорогие контроллеры с таким функционалом).
    Еще есть тип сжатия - sparse files (дырявые файлы), части файла, в которые не производилась запись, физически не занимают место (фактически тратится место только крохотная часть в области метаданных файловой системы), при чтении таких частей будут возвращены нули, так же есть функции по замене ранее записанных частей файла на такие дырки. Такие файлы могут понадобиться, например, когда нужно хранить огромные разряженные матрицы с индексацией по позиции, индекс тут будет использоваться от файловой системы но выигрыш по производительности сомнителен и требует измерений под ваши данные.

    p.s. любая сторонняя библиотека, добавляющая еще один уровень абстракции к хранилищу, может дать выигрыш только если стратегия работы с данными совпадает с той, на что заточена эта библиотека. Например реляционные базы данных дают готовый и обширный функционал по индексированию данных, многопользовательских транзакций но за счет больших накладных расходов на их поддержание. Помню был тут вопрос про хранение терабайтов данных числовой ключ -> крохотное значение (несколько байтов хеш), так вот майкрософтовская sql уже с миллионами записей могла до секунды на запись диском шерстить (тысячи iops), когда как самодельный и примитивный велосипед с одноуровневым индексом по хешу от значения мог дать скорость доступа и записи 1к1 iops накопителя (от 1 вызов к диску на запрос чтения и от 2 - на запись).
    Ответ написан
    9 комментариев
  • Как хранятся данные на диске?

    @rPman
    Вы зачем свою ОС пишете? чтобы научиться? Пилите свою файловую систему, по проще.
    Файловая система это способ хранения файлов и информации о них (например имя и место размещения на диске).

    Перед тем как работать с файлами нужно понять что такое раздел на диске (это не обязательно но удобно) - кусок диска, размер и положение которого написано в первых секторах диска (mbr или gpt если новее).

    А так, FAT16, одна из самых простых файловых систем, с которой не придется заморачиваться снаружи (ее поддерживают все современные ОС), в ней (и в большинстве других) определено понятие кластера, минимальные куски на которые разбивается диск (дальше способ позиционирования - указание номера кластера на разделе с начала), наличие таблицы FAT в которой написаны номера секторов, показывающих в каком порядке идут кластеры в файле, и корневой директории - области, в которой есть структуры, описывающие файлы и другие директории. Собственно это все.

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

    @rPman
    Btrfs умеет так, так же позволяет добавлять и удалять диски на лету
    Ответ написан
    Комментировать