как получить журналы интегрированной команды поиска и mv?

Вы должны пропустить первую строку:

awk 'BEGIN { FS=":" 
printf "%-10s %-35s %-55s\n", "RANK", "PERFORMER","SONG"
print "=====================================================================\n"} 
FNR==1{next}{printf "%-10s %-35s %-55s\n", $1, $3, $2}' songs

Если вас не волнует порядок вывода, попробуйте:

$ awk -F':' 'FNR==1{next}{a[$5]+=1} END{for(i in a){print i,a[i]}}' songs
Soul 1
Classic 6
Pop 1
2
19.02.2019, 07:13
3 ответа

Собственно, нечто подобное уже возможно

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

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

/tmp# df -h.
Filesystem                Size  Used Avail Use% Mounted on
<current filesystem>       20G   16G  3.0G  84% /

/tmp# dd if=/dev/null bs=1 seek=1024000000000 of=testdummy
0+0 records in
0+0 records out
0 bytes copied, 0.000159622 s, 0.0 kB/s
/tmp# ll testdummy
-rw-r--r-- 1 root root 1024000000000 Feb 19 08:24 testdummy
/tmp# ll -h testdummy
-rw-r--r-- 1 root root 954G Feb 19 08:24 testdummy

Здесь я создал файл, который намного больше, чем файловая система, в которой он хранится...

/tmp# du -k testdummy
0       testdummy

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

Было бы вполне возможно losetupсоздать на нем файловую систему и начать ее использовать. Каждая операция записи, которая фактически записывает данные в файл, приведет к увеличению требований к пространству для файла. Другими словами, в то время как размер файла, указанный в ls -l, все время будет оставаться таким произвольным огромным числом, фактическое пространство, занимаемое файлом на диске, как сообщается в du, будет расти.

И если вы монтируете файловую систему -как файл -с параметром монтирования discard, сжатие также может работать автоматически:

/tmp# losetup /dev/loop0 testdummy
/tmp# mkfs.ext4 /dev/loop0
/tmp# mount -o discard /dev/loop0 /mnt
/tmp# du -k testdummy 
1063940 testdummy
/tmp# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      938G   77M  890G   1% /mnt

/tmp# cp /boot/initrd.img /mnt
/tmp# du -k testdummy 
1093732 testdummy

/tmp# rm /mnt/initrd.img
/tmp# du -k testdummy
1063944 testdummy

Для автоматического сжатия требуется:

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

2. )и что тип файловой системы нижележащей файловой системы поддерживает "перфорирование отверстий", т.е.системный вызов fallocate(2)с опцией FALLOC_FL_PUNCH_HOLE(, чтобы базовой файловой системе можно было приказать пометить некоторые из ранее -выделенных блоков файловой системы -как файл -как разреженные блоки)

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

https://outflux.net/blog/archives/2012/02/15/discard-hole-punching-and-trim/

Если вас устраивает менее быстрое сжатие, вы можете просто периодически запускать fstrimв файловой системе -как файл -вместо использования опции монтирования discard. Если базовая файловая система очень загружена, отказ от немедленного сжатия может помочь свести к минимуму фрагментацию базовой файловой системы.

Проблема с этим подходом заключается в том, что если базовая файловая система переполняется, это не будет корректно обрабатываться. Если в базовой файловой системе больше нет места, файловая система -как файл -начнет получать ошибки при попытке заменить разреженные «дыры» фактическими данными, даже если файловая система -как файл -будет казаться, что осталась неиспользованная емкость.

8
27.01.2020, 21:51

Нет, автоматически не поддерживается

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

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

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

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

1
27.01.2020, 21:51

Использование разреженного файла + циклического устройства + TRIM, как в принятом, — это хорошо и нормально, однако я не совсем уверен, что у вас не проблема XY :почему бы просто не использовать подкаталог/поддерево? Он будет увеличиваться и уменьшаться по мере необходимости, и вы также можете монтировать в другом месте с помощью mount --bindили NFS ;-)

I am also aware of existing systems that do something similar: specifically VirtualBox's Dynamic Disks. If there is some way of using those - or something akin to them - without actually running a virtual machine, I would also be happy with that.

С qemu-ndbвы также можете использовать в хост-системе любой образ диска, поддерживаемыйqemu:

# modprobe nbd
# qemu-nbd --discard=unmap -c /dev/nbd1 image.qcow2
# kpartx -a /dev/nbd1
# mount /dev/mapper/nbd1p1 /mount/point
...
# fstrim -v /mount/point
...
# qemu-nbd -d /dev/nbd1

Образы qcow2 Qemu не только увеличиваются и уменьшаются для размещения данных, но также поддерживают моментальные снимки и «разные» изображения.

1
27.01.2020, 21:51

Теги

Похожие вопросы