lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
echo ", +" | sudo sfdisk --no-reread -N 4 /dev/sda
echo ", +" | sudo sfdisk --no-reread -N 5 /dev/sda
sudo partx --update /dev/sda
lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
sudo resize2fs -f /dev/sda5
lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
$ truncate -s 1G test.img
$ echo -e "label:dos\nsize=100M,bootable,type=L\nsize=200M,type=L\nsize=300M,type=L\ntype=Ex\nsize=+" | sfdisk test.img
Проверяется, чтобы сейчас никто не использовал этот диск... ОК
Диск test.img: 1 GiB, 1073741824 байт, 2097152 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
>>> Заголовок скрипта принят.
>>> Создана новая метка DOS с идентификатором 0xa605c035.
test.img1: Создан новый раздел 1 с типом 'Linux' и размером 100 MiB.
test.img2: Создан новый раздел 2 с типом 'Linux' и размером 200 MiB.
test.img3: Создан новый раздел 3 с типом 'Linux' и размером 300 MiB.
test.img4: Создан новый раздел 4 с типом 'Extended' и размером 423 MiB.
test.img5: Создан новый раздел 5 с типом 'Linux' и размером 422 MiB.
test.img6: Done.
Новая ситуация:
Тип метки диска: dos
Идентификатор диска: 0xa605c035
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
test.img1 * 2048 206847 204800 100M 83 Linux
test.img2 206848 616447 409600 200M 83 Linux
test.img3 616448 1230847 614400 300M 83 Linux
test.img4 1230848 2097151 866304 423M 5 Расширенный
test.img5 1232896 2097151 864256 422M 83 Linux
Таблица разделов была изменена
Синхронизируются диски.
$ losetup --partscan --show --find test.img
/dev/loop0
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME TYPE FSTYPE SIZE FSSIZE MOUNTPOINT
/dev/loop0 loop 1G
├─/dev/loop0p1 part 100M
├─/dev/loop0p2 part 200M
├─/dev/loop0p3 part 300M
├─/dev/loop0p4 part 1K
└─/dev/loop0p5 part 422M
$ mkfs.ext4 /dev/loop0p5
$ mkdir /tmp/mnt
$ sudo mount /dev/loop0p5 /tmp/mnt
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME TYPE FSTYPE SIZE FSSIZE MOUNTPOINT
/dev/loop0 loop 1G
├─/dev/loop0p1 part 100M
├─/dev/loop0p2 part 200M
├─/dev/loop0p3 part 300M
├─/dev/loop0p4 part 1K
└─/dev/loop0p5 part ext4 422M 385,2M /tmp/mnt
$ truncate -s +1G test.img
$ sudo losetup --verbose --set-capacity /dev/loop0
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME TYPE FSTYPE SIZE FSSIZE MOUNTPOINT
/dev/loop0 loop 2G
├─/dev/loop0p1 part 100M
├─/dev/loop0p2 part 200M
├─/dev/loop0p3 part 300M
├─/dev/loop0p4 part 1K
└─/dev/loop0p5 part ext4 422M 385,2M /tmp/mnt
$ echo ", +" | sudo sfdisk --no-reread -N 4 /dev/loop0
$ sfdisk --dump /tmp/test.img
label: dos
label-id: 0xa605c035
device: /tmp/test.img
unit: sectors
sector-size: 512
/tmp/test.img1 : start= 2048, size= 204800, type=83, bootable
/tmp/test.img2 : start= 206848, size= 409600, type=83
/tmp/test.img3 : start= 616448, size= 614400, type=83
/tmp/test.img4 : start= 1230848, size= 2963456, type=5
/tmp/test.img5 : start= 1232896, size= 864256, type=83
$ echo ", +" | sudo sfdisk --no-reread -N 5 /dev/loop0
$ sfdisk --dump /tmp/test.img
label: dos
label-id: 0xa605c035
device: /tmp/test.img
unit: sectors
sector-size: 512
/tmp/test.img1 : start= 2048, size= 204800, type=83, bootable
/tmp/test.img2 : start= 206848, size= 409600, type=83
/tmp/test.img3 : start= 616448, size= 614400, type=83
/tmp/test.img4 : start= 1230848, size= 2963456, type=5
/tmp/test.img5 : start= 1232896, size= 2961408, type=83
$ sudo partx --update /dev/loop0
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME TYPE FSTYPE SIZE FSSIZE MOUNTPOINT
/dev/loop0 loop 2G
├─/dev/loop0p1 part 100M
├─/dev/loop0p2 part 200M
├─/dev/loop0p3 part 300M
├─/dev/loop0p4 part 1K
└─/dev/loop0p5 part ext4 1,4G 385,2M /tmp/mnt
$ sudo resize2fs /dev/loop0p5
$ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
NAME TYPE FSTYPE SIZE FSSIZE MOUNTPOINT
/dev/loop0 loop 2G
├─/dev/loop0p1 part 100M
├─/dev/loop0p2 part 200M
├─/dev/loop0p3 part 300M
├─/dev/loop0p4 part 1K
└─/dev/loop0p5 part ext4 1,4G 1,3G /tmp/mnt
$ sudo umount /tmp/mnt
$ losetup -d /dev/loop0
yay -S pscircle
$HOME/.local/bin/background
#!/usr/bin/env bash
PICTURE_PATH=/tmp/pscircle.png
TIME_UPDATE=5 # ставить >= 2
# борьба с дублями программы
PID_PATH=/tmp/background.pid
[[ -e $PID_PATH ]] && kill $(cat $PID_PATH)
echo $$ > $PID_PATH
[[ -n "$(pgrep swaybg)" ]] && pkill swaybg
while :; do
pscircle --output=$PICTURE_PATH \
--max-children=50 \
--output-width=1920 \
--output-height=1080 \
--tree-radius-increment=150 \
--dot-radius=3 \
--link-width=1.3 \
--tree-font-size=13 \
--toplists-font-size=20 \
--tree-center=-300:0 \
--cpulist-center=600.0:-120.0 \
--memlist-center=600.0:120.0
swaybg --image $PICTURE_PATH \
--mode center \
--color "#000000" \
--output "*" &
# время на установку нового изображения перед тем как убрать старое
# убирает мерцание при смене обоев
sleep 1
[[ -n $pid ]] && kill $pid
pid=$(pgrep swaybg)
sleep $[TIME_UPDATE-1]
done
#!/usr/bin/env bash
PICTURE_PATH=/tmp/pscircle.png
TIME_UPDATE=5
# борьба с дублями программы
PID_PATH=/tmp/background.pid
[[ -e $PID_PATH ]] && kill $(cat $PID_PATH)
echo $$ > $PID_PATH
[[ -n "$(pgrep swaybg)" ]] && pkill swaybg
while :; do
pscircle --output=$PICTURE_PATH
swaymsg "output * background $PICTURE_PATH fill #000000"
sleep $TIME_UPDATE
done
chmod +x $HOME/.local/bin/background
$HOME/.config/sway/config
добавляем строчкуexec_always $HOME/.local/bin/background
bindsym $mod+Shift+c reload
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
paste file1 file2
paste <(hostnamectl) <(hostnamectl)
hostnamectl |awk '{print $0";"}'
paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl)
paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl) | column -t -s';'
paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl) | csview -H -d';'
paste <(hostnamectl) <(hostnamectl) | csview -H --tsv
Да, я немного не правильно выразился, хочу из одного ссд сделать грубо говоря два (на виндовс-языке: разбить на два тома), и в один "том" записать /root, /swap и т.д, а во второй /home, и было бы неплохо еще и /usr.
$ pacman -v
...
DB Path : /var/lib/pacman/
telegram-desktop
firefox
chromium
emacs
sudo pacman -S $(<pacman.list)
yay -S $(<pacman.list)
sudo pacman -S $(curl -s ...)
$ type --help
~
-t output a single word which is one of `alias', `keyword',
`function', `builtin', `file' or `', if NAME is an alias,
shell reserved word, shell function, shell builtin, disk file,
or not found, respectively
~
$ type -t cp dir bg dmesg
file
file
builtin
file
$ curl -s "http://www.cbr.ru/scripts/XML_daily.asp" | enconv -x UTF-8 | xq -r '.ValCurs.Valute[] | select(.CharCode == "USD" or .CharCode == "EUR") |.CharCode + " " + .Value'
USD 74,7087
EUR 79,5716
curl -s "http://www.cbr.ru/scripts/XML_daily.asp" | enconv -x UTF-8 | xq -r '.ValCurs.Valute[] | .CharCode + " " + .Nominal + " " + .Value' | sort | awk 'BEGIN{print "Code Nominal Value"}{print}' | csview -d' '
┌──────┬─────────┬─────────┐
│ Code │ Nominal │ Value │
├──────┼─────────┼─────────┤
│ AED │ 1 │ 20,3400 │
│ AMD │ 100 │ 19,1325 │
│ AUD │ 1 │ 51,0933 │
│ AZN │ 1 │ 43,9463 │
│ BGN │ 1 │ 40,7332 │
│ BRL │ 1 │ 14,3646 │
│ BYN │ 1 │ 26,6998 │
│ CAD │ 1 │ 55,2743 │
│ CHF │ 1 │ 80,5485 │
│ CNY │ 1 │ 10,8398 │
│ CZK │ 10 │ 33,5739 │
│ DKK │ 1 │ 10,7002 │
│ EGP │ 10 │ 24,4263 │
│ EUR │ 1 │ 79,5716 │
│ GBP │ 1 │ 90,6889 │
│ GEL │ 1 │ 28,3363 │
│ HKD │ 10 │ 95,3890 │
│ HUF │ 100 │ 20,7001 │
│ IDR │ 10000 │ 49,2185 │
│ INR │ 100 │ 90,1603 │
│ JPY │ 100 │ 55,4219 │
│ KGS │ 100 │ 85,4595 │
│ KRW │ 1000 │ 57,2524 │
│ KZT │ 100 │ 16,7640 │
│ MDL │ 10 │ 39,8181 │
│ NOK │ 10 │ 72,3823 │
│ NZD │ 1 │ 46,5734 │
│ PLN │ 1 │ 16,7565 │
│ QAR │ 1 │ 20,5244 │
│ RON │ 1 │ 16,1333 │
│ RSD │ 100 │ 67,8622 │
│ SEK │ 10 │ 72,2507 │
│ SGD │ 1 │ 55,7819 │
│ THB │ 10 │ 21,5775 │
│ TJS │ 10 │ 69,2908 │
│ TMT │ 1 │ 21,3453 │
│ TRY │ 10 │ 39,6051 │
│ UAH │ 10 │ 20,2313 │
│ USD │ 1 │ 74,7087 │
│ UZS │ 10000 │ 66,0995 │
│ VND │ 10000 │ 31,6013 │
│ XDR │ 1 │ 99,6569 │
│ ZAR │ 10 │ 40,6808 │
└──────┴─────────┴─────────┘
$ curl -s "http://www.cbr.ru/scripts/XML_daily.asp" | enconv -x UTF-8 | xq -r '.ValCurs.Valute[] | select(.CharCode == "USD" or .CharCode == "EUR") |.CharCode + " " + .Nominal + " " + .Value' | awk 'BEGIN{print "Code Nominal Value"}{print}' | csview -d' '
┌──────┬─────────┬─────────┐
│ Code │ Nominal │ Value │
├──────┼─────────┼─────────┤
│ EUR │ 1 │ 79,5716 │
│ USD │ 1 │ 74,7087 │
└──────┴─────────┴─────────┘
curl "https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usbutils.git/plain/lsusb.py.in" > lsusb.py && chmod +x lsusb.py
./lsusb.py
Он как видно на 100049 байт.
Мне нужно записывать в него строки ew=`cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 76` до тех пор пока он не заполнится полностью.
#!/usr/bin/env bash
#вводные
FILE=file.txt
S=100049 # общий размер в байтах
s=76 # максимальное количество однобайтовых символов на строку
N=$[S/(s+1)]
n=$[S-N*(s+1)]
echo "Cтрок + хвост = $N + $n"
rm -rf $FILE
for (( i = 0; i < $N; i++ )); do
cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c $s >> $FILE
echo >> $FILE
done
cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c $n >> $FILE
echo "Файл записан"
echo "Размер файла $FILE = $(stat -c %s $FILE) байт"