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

топ 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 об/мин). Для торрентов — то, что надо. Осталось подключить его к серверу, и это будет отдельная песня с отдельной картинкой.

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

Архив записей в блогах:
И нет, я не пила, просто жизнерадостная!)) Сегодня сплю в Бете.
Давеча френдесса Оля kogotki написала: Я играю в буквы Правила игры: 1. Оставляем комментарий - получаем букву (если хотим, конечно). 2. Пишем 10 слов, с нее начинающихся, так или иначе связанных с собственной жизнью или мироощущением, и размещаем у ...
https://inosmi.ru/20241106/tramp-270667023.html Победа Дональда Трампа на выборах в США — ужасное событие для Украины, пишет "Гордон". Чтобы окончательно не впасть в уныние, автор статьи предлагает смотреть на ситуацию с оптимизмом: хуже уже точно не будет, а украинцам, которыми ...
...
Не паники ради, а статистики для. Получила на руки результаты ОАМ пятимесячной дочери. Все показатели в норме, но имеется незначительное присутствие бактерий и повышены лейкоциты (аж 19). Ребёнок бодр, весел, щекаст и вовсю ползает на пузе по комнате. Прививку отложила и завтра с утра анал ...