• Сколько было записано на SSD за всю жизнь?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    возможно у вас параметр Total_LBAs_Written не в секторах отмеряется а сразу в гигах,
    в принципе это легко проверить при помощи dd, для этого можете использовать код из этого ответа.

    update
    ***скрипт***

    закинуть в файл Total_LBAs_Written и сделать его исполняемым:
    chmod +x Total_LBAs_Written
    сам скрипт
    #!/usr/bin/env bash
    
    ##############################################################################################################
    # Описание
    #
    # Определение количества записанных данных на диск за всё время его работы исходя из RAW показателей smartctl
    # Грубо говоря, это перевод значения показателя Total_LBAs_Written в человеко понятный вид за счет сравнения его 
    # показателей до и после записи тестового файла на выбранный диск.
    #
    #
    # Условие работы
    #
    # Для работы программы в системе должны присутствовать следующие утилиты:
    #   smartctl
    #   fzf
    #
    #
    # Использование
    #
    # Примеры запуска программы:
    # $ sudo Total_LBAs_Written
    # $ sudo Total_LBAs_Written 2G
    # $ sudo Total_LBAs_Written 100М
    #
    # далее в меню выберите нужный диск и нажмите Enter
    # по умолчанию тестовый файл берётся в 1 гиг, но можно указать и своё значения передав его программе первым параметром.
    # В меню будут отображаться тока те диски которые соответствуют критериям: 
    # - несъёмный
    # - примонтирован в системе
    # - не быть в режиме только для чтения (для возможности записи на него временных тестовых данных)
    # - иметь достаточно места для записи тестового файла
    #
    #
    # Пример вывода программы
    #
    # $ sudo Total_LBAs_Written 100M
    # Total_LBAs_Written (1) = 5860217375
    # Total_LBAs_Written (2) = 5860422239 ~ 2999598811739 bytes = 2,8T
    #              (2) - (1) = 204864 ~ 104857600 bytes = 100M (test file size)
    # ==============================================================================
    # Итого на диск /dev/sda было всего записанно порядка 2,8T
    #
    ##############################################################################################################
    
    # set -o xtrace
    set -o nounset
    set -o errexit
    set -o pipefail
    
    TESTFILE_SIZE=${1:-1G}
    TESTFILE_SIZE_BYTES=$(numfmt --from=iec $TESTFILE_SIZE)
    
    disk_partitions(){
    	lsblk -plo PKNAME,NAME,MOUNTPOINT $(lsblk -rbpo "PATH,RM,RO,FSAVAIL" |awk -v size=$TESTFILE_SIZE_BYTES '$2==0&&$3==0&&$4>size{print $1}')
    }
    
    export TESTFILE_SIZE_BYTES
    export -f disk_partitions
    
    
    SELECTED_PARTITION=$(disk_partitions \
    |fzf 	--bind 'ctrl-r:reload(bash -c 'disk_partitions')' \
    		--header $'Ctrl+c\t- выйти\nCtrl+r\t- обновить\nEnter\t- выбрать\n\n' \
    		--header-lines=1 \
    		--layout=reverse \
    |awk '{print $2}' )
    
    
    DISK=$(lsblk -npo PKNAME $SELECTED_PARTITION)
    
    TLW1=$(smartctl -a $DISK | awk '/Total_LBAs_Written/{print $NF}')
    [[ -z $TLW1 ]] && echo "Параметр Total_LBAs_Written на текущем диске $DISK не найден !!!" && exit 1
    
    TESTFILE_PATH=$(lsblk -no MOUNTPOINTS $SELECTED_PARTITION)/testfile
    
    
    sync -f $SELECTED_PARTITION
    dd if=/dev/zero of=$TESTFILE_PATH bs=$TESTFILE_SIZE_BYTES count=1 status=none
    sync -d $TESTFILE_PATH
    rm $TESTFILE_PATH
    
    TLW2=$(smartctl -a $DISK | awk '/Total_LBAs_Written/{print $NF}')
    
    echo "Total_LBAs_Written (1) = "$TLW1
    TLW2_SIZE=$(echo "$TLW2*$TESTFILE_SIZE_BYTES/($TLW2-$TLW1)"|bc)
    echo "Total_LBAs_Written (2) = $TLW2 ~ $TLW2_SIZE bytes = "$(numfmt --to=iec $TLW2_SIZE)
    echo "             (2) - (1) = $[TLW2-TLW1] ~ $TESTFILE_SIZE_BYTES bytes = "$(numfmt --to=iec $TESTFILE_SIZE_BYTES)" (test file size)"
    
    echo ==============================================================================
    echo "Итого на диск $DISK за всё время его работы было записанно порядка $(numfmt --to=iec $TLW2_SIZE)"
    
    exit
    Ответ написан
    4 комментария
  • Как копировать директорию с помощью bash с кириллицей?

    @alexyr
    Developer
    Для директорий нужен флаг: -r

    Всегда стоит экранировать переменные двойными кавычками:
    cp -r "$dir/a/src" "$dir/b/"

    Это решит проблемы с пробелами и другими спец. символами...

    Как вариант, можно воспользоваться автодополнением баш, написав/скопировав начало имени и нажимая таб.
    В этом случае баш сам экранирует всё необходимое с помощью "\":
    cp -r /home/user/Рабочий\ стол/a/dir /home/user/Рабочий\ стол/b/
    Ответ написан
    Комментировать
  • От какого принтера картридж можно поставить на samsung ml-1615, после небольшой доработки последнего?

    @Mark_Berkutov
    Специалист STMC-тестирования ВЕНЕТА СИСТЕМ
    В принтере есть "ключ" - выступаящая металлическая планка вверху отсека , а на картридже в свою очередь паз в "мусорке".

    Если удалить ключ, то в ваш аппарат влезут и станут работать следующие модели:
    самсунг 1610/2010/119
    ксерокс 3117
    Ответ написан
    Комментировать
  • Создание экземпляра класса эквивалентен созданию переменной?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Короче, в дополнение к уже имеющимся ответам и для их систематизации... Начнем с простых вещей.

    Есть принципиальная разница между объявлением переменной и присвоением ей значения. Для примитивных типов это не должно вызывать затруднений
    int x; // <---- declaration *
    ...
    x = 15; // <----- assignment
    ...
    int y = 25; // <------- declaration, then assignment

    * - тот факт, что в этом месте после объявления в переменной в большинстве имплементаций Явы будет значение 0, оставим на потом, и разберемся, в чем конкретно разница. Объявление приводит к тому, что где-то в памяти резервируется место, которое потом может быть (но может и не быть!) заполнено значением соответствующей длины (типа). Быть или не быть, полностью зависит от дальнейшей программы. А присвоение приводит к тому, что некое значение помещается в ранее объявленную переменную.
    (В этом суть! Всё остальное, включая неявное объявление переменных, анонимные классы, оптимизации компилятора и т.д. - сахар, для удобства и компактности/читаемости кода.)

    Далее. Откуда берется значение, которое присваивается переменной? Оно либо уже известно в момент компиляции кода (константа/литерал, как, например, 15 или 25 выше), или станет известно во время его выполнения. Второе имеет место быть в случае, когда тип переменной - ссылка на объект (экземпляр класса). В момент компиляции никакого экземпляра еще нет. Чтоб он возник (и стала известна ссылка на него, которую туда можно поместить), нужно еще выполнить много разных действий, первое из которых - попытаться выделить под него память (что, кстати говоря, может и не получиться, если ее по какой-либо причине в этот момент нет). Именно это и делает new - выделяет память под экземпляр класса, создает его, выполняет статическую инициализацию, вызывает подходящий конструктор (он может быть перегружен или наследоваться), и только если все прошло успешно - присваивает переменной ссылку на свеженький экземпляр.

    Этого, конечно, можно и не делать, а написать просто
    Man superman;
    и это будет означать именно то, что написано: под переменную (типа "ссылка на экземпляр класса Man") будет выделено место, но никакого экземпляра не возникнет, а сама переменная будет содержать значение null (т.е. ссылка "в никуда", типа как 0 для int). Однако, такой код тоже может иметь смысл, если, например, экземпляр будет создан позже или же переменной позже будет присвоено значение другой переменной, содержащей на тот момент ссылку на экземпляр подходящего типа.

    Ну и, наконец, отличить примитивный тип от объекта в Java очень просто :) По договоренности названия примитивных типов начинаются с маленькой буквы, а названия классов - с большой.
    Ответ написан
    Комментировать
  • Создание экземпляра класса эквивалентен созданию переменной?

    Насколько я понимаю вы новичок в Java.
    Советую изучить вот эту статью для начала.
    И вообще, лучше осилить 4 главы из этой книги(можно легко найти в сети).С ходу объяснить невозможно.
    В Java Object object;- это всего-лишь ссылка.Вы просто декларируете переменную.Чтобы присвоить ей объект в Куче(специальная структура данных, в которой хранятся все объекты JVM), мы используем object = new Object();
    Такой подход позволяет динамически менять объекты, использовать полиморфизм, отложенную инициализацию и т.д.

    P.s
    int x = new int(); написать нельзя, потому что int - это примитивный тип.
    Ответ написан
    1 комментарий
  • Создание экземпляра класса эквивалентен созданию переменной?

    Konstantin18ko
    @Konstantin18ko
    Стоматолог
    Смотрите:
    У Вас есть две фигурки супер мена.
    man superman1 = new man();
    man superman2 = new man();
    Переменная superman1 ссылается на первую фигурку, superman2 - на вторую фигурку.

    man superman3 = superman1;

    Теперь, у нас есть третья переменная, которая ссылается на первую фигурку.
    Итого: 3 переменных, 2 объекта.

    Почему же мы пишем int x = 0; а не int x = new int(0);
    Потому что int - это целочисленная цифра и ей нельзя передать какие либо свойства/аргументы. Единица, это единица, два это два.
    man superman1 = new man(быстро бегать, неуязвимый);
    man superman2 = new man(далеко прыгать, бессмертный);

    int x = new int(0); все, у типа int закончились супер способности, только число и все.
    String str = new String("String"); всего лишь строка, больше ничего нет.
    Ответ написан
    Комментировать
  • Создание экземпляра класса эквивалентен созданию переменной?

    @tasce
    Такой синтаксис, а сахара для него не придумали. Остаётся либо смириться, либо придумать Java препроцессор для сахара. Ваш пример с "man superman;" больше похож на сахар.
    Ответ написан
    1 комментарий
  • FreeBSD на Desktop. У кого и для чего?

    @timfactory
    Командорская машина на FreeBSD с 2004 г. На ноутбуках также стояла - FreeBSD, кстати, приучает использовать проверенное железо. На работе тоже стоит, если нет корпоративных стандартов и работа не имеет целевой платформой Linux, в последнем случае - работаю на слаке.

    Почему - сначала, захотелось работать под Unix, потом - не перелез на Linux, потому, что во FreeBSD довольно консервативная политика разработки и большое внимание уделяется целостности системы, так, от версии к версии, больше обогащается структура, чем усложняется форма (т.е. появляются новые возможности у старых решений, а не появляется поколение новых решений, которые решают новые задачи, но не решают задач, которые решались старыми. "Лучший способ уничтожить FreeBSD - это дать нашей инфраструктуре прогнить" (с) Пол-Хеннинг Камп), и потому, что отсутствует зоопарк конфигурационных моделей - дистрибутив, по-сути, на всех, один - BSD.

    Для чего - мультимедиа, интернет, разработка. Флеш и Android SDK прикручены через linuxulator, остальное - родное, из портов. Пока-что, только две проблемы заставляют иметь дополнительные "задачно-ориентированные" системы (Linux/Windows) - игрушки и музыка (MIDI во FreeBSD, где-то с 5-ой ветки и до сих пор, не работает на родных драйверах, нужно OSS ставить из портов, а там - начинаются развлечения с микшером и т.д. и т.п.).
    Ответ написан
    3 комментария