О хранении данных

топ 100 блогов hardsign31.10.2024

Размышляя, куда бы положить локальную копию «Флибусты», в очередной раз купил sd-карточку на известном сайте. Разумеется, тут же начал её проверять. Карточка тормозная, скорость записи — около 3 мегабайт в секунду, ну и естественно фальшивая. Никогда, НИКОГДА не покупайте sd-карточки объёмом больше 32 Гбайт на AliExpress!

У меня, кстати, много лет (тьфу-тьфу-тьфу) в телефоне стоит карточка на 128 Гбайт, но она куплена ещё на DealExtreme, вот.

А теперь немного технических подробностей о проверке карточек.

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

#!/usr/bin/env bash # https://habr.com/ru/post/590021/ die() { echo >&2 -e "${1-}" exit "${2-1}" } usage() { cat < Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-f file_size] media_path This script tests the media availability and I/O speed by creating random files and checking the hashes. media_path Path to the media mount point Available options: -h, --help Print this help and exit -f, --file-size File size (default=1024M) EOF exit } cleanup() { trap - SIGINT SIGTERM ERR EXIT # script cleanup here } setup_colors() { if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m' else NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW='' fi } parse_params() { FILE_SIZE=1024 MEDIA_PATH='' args=("$@") [[ ${#args[@]} -eq 0 ]] && usage while :; do case "${1-}" in -h | --help) usage ;; --no-color) NO_COLOR=1 ;; -f | --file-size) FILE_SIZE="${2-}" shift ;; -?*) die "Unknown option: $1" ;; *) MEDIA_PATH="${1}" break ;; esac shift done [[ -z "${MEDIA_PATH-}" ]] && die "Missing media path" return 0 } setup_colors for i in printf dd bc tee md5sum cut do if ! which ${i} >/dev/null; then die "${RED}${i}${NOFORMAT} NOT FOUND; PLEASE INSTALL"; fi; done set -Eeuo pipefail trap cleanup SIGINT SIGTERM ERR EXIT parse_params "$@" if [[ ! -d ${MEDIA_PATH} ]]; then die "Media path not found"; fi if [[ ${MEDIA_PATH:(-1)} == "/" ]]; then MEDIA_PATH=${MEDIA_PATH:0:(-1)}; fi nf=0 while : do znf=000000${nf} fn=${MEDIA_PATH}/${znf:(-6)}.bin nf=$((nf+1)) if [[ -f ${fn} ]]; then printf "%06s: ${RED}already exists${NOFORMAT}\n" ${znf:(-6)} continue fi rc=$((/usr/bin/time -f '%e' dd if=/dev/urandom bs=1048576 count=${FILE_SIZE} status=none |\ tee ${fn} | md5sum | cut -f 1 -d ' ') 2>&1) tw=$(echo ${rc} | cut -f 1 -d ' ') hw=$(echo ${rc} | cut -f 2 -d ' ') LC_NUMERIC=C sw=$(echo "scale=3; ${FILE_SIZE}/${tw}" | bc) LC_NUMERIC=C printf "%06s: %5.1f s ${YELLOW}%4.1f Mb/s${NOFORMAT} %s // " \ ${znf:(-6)} ${tw} ${sw} ${hw} rc=$((/usr/bin/time -f "%e" md5sum ${fn} | cut -f 1 -d ' ') 2>&1) tr=$(echo ${rc} | cut -f 1 -d ' ') hr=$(echo ${rc} | cut -f 2 -d ' ') if [[ ${hr} == ${hw} ]]; then comp=${GREEN}ok${NOFORMAT}; else comp=${RED}ERROR${NOFORMAT}; fi LC_NUMERIC=C sr=$(echo "scale=3; ${FILE_SIZE}/${tr}" | bc) LC_NUMERIC=C printf "%s ${YELLOW}%4.1f Mb/s${NOFORMAT} %5.1f s %b\n" ${hr} ${sr} ${tr} ${comp} done

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

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

Хорошая новость заключалась в том, что файловый кеш относится к общей памяти процесса, и если ограничить память процесса, то не будет и кеша. Я когда-то слышал слово cgroups, но толкового руководства в сети так и не нашёл. Максимум — вот такое.

Ну что ж... режем доступную память до минимума, снимаем процесс копирования файла на видео... И вот уже AliExpress принял решение полностью вернуть деньги. Справедливость восторжествовала.

Но где же хранить данные?

Пришлось вспомнить давно забытое кунг-фу и купить обычный жёсткий диск. А к нему — usb-адаптер с внешним питанием на 12 вольт.

О хранении данных

Тарахтит как трактор, выдаёт честных 180 мегабайт в секунду (на 5400 об/мин). Для торрентов — то, что надо. Осталось подключить его к серверу, и это будет отдельная песня с отдельной картинкой.

Оставить комментарий

Архив записей в блогах:
Массовое тестирование и налаженный сбор статистических данных в США в условиях эпидемии коронавируса показали много неожиданных результатов. Главный – основную часть заболевших и умерших от страшной напасти в некоторых городах и штатах страны на этот момент составляют ...
Мэр Нижнего Тагила Владислав Пинаев назвал избиение ( https://t.me/migranty_RUS/2168 ) девочки-сироты «рядовым событием», а всех возмущающихся хохлами. По мнению мэра (вот ( https://t.me/vladislav_pinaev ) его канал), на любую новость в комментариях в соцсетях появляется много негатива ...
Миттєва юридична допомога Кожного дня ми стикаємося з проблемами юридичного характеру. Для цього необов’язково порушувати закони або вести неправильний спосіб життя. Достатньо просто жити і користуватися благами цивілізації. Живемо у квартирі – сплачуємо по несправедливих квит ...
1923 год издания. От 0 до 5 лет, 11 страниц  рассказывала мне  бабушка Даша.    Она в 1923 году была уже давно  девой-засиделкой или старшей ...
 Итак, согласно российской таможне экспорт России за 2019 год составил очень приятную цифру - 424.6 миллиарда долларов.  Нефть и прочие газы составили 62.1%  Металлы - 8.9%  Продукты химии - 6.4%  Оборудования и техники - 6.5% ...