From: "Денис Смирнов" <mithraen@freesource.info>
To: community@lists.altlinux.org
Subject: Re: [Comm] автомонтирование без DE
Date: Tue, 29 Jul 2014 20:16:19 +0400
Message-ID: <20140729161619.GB7385@mw.mithraen.ru> (raw)
In-Reply-To: <3406861406630905@web13j.yandex.ru>
[-- Attachment #1.1: Type: text/plain, Size: 1825 bytes --]
On Tue, Jul 29, 2014 at 02:48:25PM +0400, Speccyfighter wrote:
> - lsblk, который придётся грепать инверсией НЕ, иначе выбросит
> листингом не только съёмные
wtf HE?
И как определить съемные? Я тут обнаружил, что в /sys/block/sdk/removable
у меня '0', при том что sdk это флешка.
> (у себя при двух hdd и usb-hdd это выбросит 20 файловых систем -
> здесь нельзя не грепать)
А если грепать исключая содержимое fstab?
> - blkid, который надо будет вкручивать через sudo и беспарольку для
> blkid -s LABEL -s TYPE /dev/что
Зачем blkid, когда есть lsblk?
$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,RM
> - плюс ко всему этому, надо будет вкрутить alias'ы, чтобы отбросить
> "мусор" и упростить ввод до уровня hmount: показать всё, кроме съёмных.
> Возможно алиасом или скриптом для аналога 'hmount -l'
Я попробовал написать такой скрипт, и у меня возникла проблема -- я не
могу определить что есть съемные устройства. Ибо флешка, как оказалось, не
съемное устройство.
> У меня как блочные usb используются:
> 4 флешки + 2 microSD + usb-hdd
> (Конец ли это?)
> А угадывать, что есть что, желания никакого.
Разумеется.
> Всё это требует подготовки, и подготовки под каждую конкретную
> конфигурацию вместо одного единственного
> hmount -l
> который всё это показывает сразу и без преконфигурирования.
> Не требуя от пользователя какого-либо мало-мальски серьёзного знания
> внутренностей системы и предварительной подготовки.
> Не считая запущенный hal естественно.
> Вот если смотреть под таким углом, то 'hmount -l', это да,
> именно киллер фича.
> Которая у себя видится в сравнении вот так.
В аттаче макет скрипта, который вероятно выполняет эту задачу. Пожалуйста,
посмотрите делает ли он то, что вы хотите.
--
С уважением, Денис
http://mithraen.ru/
[-- Attachment #1.2: lmount --]
[-- Type: text/plain, Size: 2580 bytes --]
#!/usr/bin/perl -w
#============================================================================#
# List all block devices that not exists in fstab #
#============================================================================#
# (C) Denis Smirnov <mithraen@freesource.info> #
#============================================================================#
use strict;
use warnings qw(FATAL all);
use utf8;
use open qw(:utf8 :std);
use Cwd 'abs_path';
my @lsblk = split( "\n",
`/bin/lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,RM,KNAME,MODEL,TYPE,UUID -P`
);
my %disks;
my %fstab_dev;
my %fstab_uuid;
my %fstab_label;
sub parse_fstab() {
open( my $fh, "<", "/etc/fstab" ) || die;
while (<$fh>) {
s/#.*//;
next if /^\s*$/;
s/\s+.*$//;
s/\s+$//;
if (/^LABEL=\"([^\"]+)\"/) {
$fstab_label{$1} = 1;
}
elsif (/^LABEL=([^\"]+)/) {
$fstab_label{$1} = 1;
}
if (/^UUID=\"([^\"]+)\"/) {
$fstab_uuid{$1} = 1;
}
elsif (/^UUID=([^\"]+)/) {
$fstab_uuid{$1} = 1;
}
else {
my $dev = $_;
$dev = abs_path($dev) if -l $dev;
$fstab_dev{$dev} = 1;
}
}
close($fh);
}
sub parse_line($) {
my $fields = $_[0];
my %h;
while ( $fields =~ s/^\s*([^"]+)="([^\"]*)"\s*// ) {
$h{$1} = $2;
}
my $dev = $h{KNAME};
if ( $h{TYPE} eq 'disk' ) {
$disks{$dev} = \%h;
}
if ( $h{TYPE} eq 'part' ) {
my $basedev = $dev;
$basedev =~ s/\d+$//;
foreach my $key ( keys %h ) {
if ( $h{$key} eq '' ) {
$h{$key} = $disks{$basedev}->{$key};
}
}
}
# return if $h{RM} eq '0';
return if $h{FSTYPE} eq '';
return if $h{FSTYPE} eq 'swap';
return if $h{FSTYPE} eq 'linux_raid_member';
return if $h{FSTYPE} eq 'LVM2_member';
# skip LVM partitions
return if $h{TYPE} eq 'lvm';
# skip FS in fstab
return if defined $fstab_label{ $h{LABEL} };
return if defined $fstab_uuid{ $h{UUID} };
return if defined $fstab_dev{ "/dev/" . $h{KNAME} };
return \%h;
}
use Data::Dump qw/ddx/;
parse_fstab;
my @out;
foreach (@lsblk) {
my $h = parse_line($_);
next unless defined $h;
# ddx $h;
my $dev = "/dev/" . $h->{KNAME};
push @out, $dev;
}
my $devices = join( ' ', @out );
print
`/bin/lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,RM,KNAME,MODEL,TYPE,UUID -l $devices`;
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
next prev parent reply other threads:[~2014-07-29 16:16 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-23 16:50 Денис Смирнов
2014-07-23 20:54 ` Michael Shigorin
2014-07-24 8:35 ` Денис Смирнов
2014-07-24 8:57 ` Michael Shigorin
2014-07-24 12:55 ` Владимир Гусев
2014-07-28 23:36 ` Денис Смирнов
2014-07-29 3:55 ` Eugene Prokopiev
2014-07-29 15:10 ` Денис Смирнов
2014-07-24 18:00 ` Speccyfighter
2014-07-24 19:41 ` Фаизов Алишер
2014-07-24 19:49 ` Speccyfighter
2014-07-24 21:21 ` Mikhail Efremov
2014-07-24 23:09 ` Speccyfighter
2014-07-28 23:41 ` Денис Смирнов
2014-07-29 10:48 ` Speccyfighter
2014-07-29 10:52 ` Speccyfighter
2014-07-29 16:16 ` Денис Смирнов [this message]
2014-07-29 18:13 ` Speccyfighter
2014-07-29 19:20 ` Денис Смирнов
2014-07-29 19:52 ` Speccyfighter
2014-07-29 19:59 ` Speccyfighter
2014-07-30 0:52 ` Денис Смирнов
2014-07-30 3:26 ` Speccyfighter
2014-07-30 18:11 ` Денис Смирнов
2014-07-31 2:00 ` Speccyfighter
2014-07-31 14:06 ` Денис Смирнов
2014-07-31 14:39 ` Speccyfighter
2014-07-31 16:47 ` Денис Смирнов
2014-07-31 17:35 ` Speccyfighter
2014-07-31 19:05 ` Денис Смирнов
2014-08-01 0:47 ` Speccyfighter
2014-08-01 2:43 ` Денис Смирнов
2014-08-01 17:13 ` Speccyfighter
2014-08-02 14:09 ` Денис Смирнов
2014-08-02 18:51 ` Speccyfighter
2014-08-03 3:58 ` Денис Смирнов
2014-08-03 14:22 ` Speccyfighter
2014-08-03 19:46 ` Денис Смирнов
2014-08-03 22:33 ` Speccyfighter
2014-08-04 13:29 ` Денис Смирнов
2014-08-05 15:15 ` Speccyfighter
2014-08-05 18:43 ` Денис Смирнов
2014-08-06 12:55 ` Speccyfighter
2014-08-06 21:52 ` Денис Смирнов
2014-08-07 0:24 ` Speccyfighter
2014-08-07 15:56 ` Speccyfighter
2014-08-07 16:14 ` Speccyfighter
2014-08-07 16:55 ` Денис Смирнов
2014-08-07 17:07 ` Speccyfighter
2014-08-08 3:28 ` Денис Смирнов
2014-08-09 19:50 ` Michael Shigorin
2014-08-15 9:52 ` Денис Смирнов
2014-08-15 10:22 ` Michael Shigorin
2014-08-15 11:26 ` Денис Смирнов
2014-08-04 18:35 ` Michael Shigorin
2014-07-30 4:46 ` Speccyfighter
2014-07-30 5:31 ` Speccyfighter
2014-07-30 14:41 ` Денис Смирнов
2014-07-30 16:39 ` Speccyfighter
2014-07-29 19:27 ` Speccyfighter
2014-07-29 19:04 ` Speccyfighter
2014-07-30 0:10 ` Денис Смирнов
2014-07-30 9:23 ` Michael Shigorin
2014-07-30 14:39 ` Денис Смирнов
2014-07-30 9:38 ` Sergey
2014-07-30 11:16 ` Sergey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140729161619.GB7385@mw.mithraen.ru \
--to=mithraen@freesource.info \
--cc=community@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git