Thread linux bind mounts
(4 answers)
Opened by mark05 at 2012-05-03 09:55
Eine kurze Lösung habe ich nicht. Nur etwas Code, das herausfindet welches Verzeichnis mit "--bind" gemountet ist. "mount" oder "/etc/mtab" oder "/proc/mounts" alleine reicht nicht. Die Informationen reichen nicht.
Das hier funktioniert bei mir: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 #!/usr/bin/perl use strict; use warnings; for my $bind (@{find_mount_bind()}) { print qq!Directory "$bind->{root}" is bound to "$bind->{mount_point}"\n!; } ######################################## ######################################## ######################################## sub parse_mounts { my $file="/proc/$$/mounts"; open(my $fh, '<', $file) or die("ERROR $file ($!)\n"); my @ret; while(<$fh>) { my %info; my @line=split(/\s+/,$_); $info{device}=shift(@line); $info{mount_point}=shift(@line); $info{fstype}=shift(@line); $info{mount_options}=[split(/,/,shift(@line))]; push(@ret,\%info); } close($fh); return \@ret; } sub parse_mountinfo { my $file="/proc/$$/mountinfo"; open(my $fh, '<', $file) or die("ERROR $file ($!)\n"); my @ret; while(<$fh>) { my %info; my @line=split(/\s+/,$_); $info{mount_id}=shift(@line); $info{parent_id}=shift(@line); my @m=split(/:/,shift(@line)); $info{major}=shift(@m); $info{minor}=shift(@m); $info{root}=shift(@line); $info{mount_point}=shift(@line); $info{mount_options}=[split(/,/,shift(@line))]; $info{optional_fields}={}; while(my $val=shift(@line)) { last if($val eq '-'); my ($k,$v)=split(/:/,$val); $info{optional_fields}->{$k}=$v; } $info{fstype}=shift(@line); $info{mount_source}=shift(@line); $info{super_options}=[split(/,/,shift(@line))]; push(@ret,\%info); } close($fh); return \@ret; } sub find_mount_bind { my $infos=parse_mountinfo(); my $mount=parse_mounts(); my @ret; for my $ip (@$infos) { if($ip->{root} ne '/') { for my $mp (@$mount) { if( $ip->{mount_source} eq $mp->{device} ) { next if($mp->{mount_point} eq $ip->{mount_point}); push(@ret,{ root => $mp->{mount_point}.$ip->{root}, mount_point => $ip->{mount_point}, }); last; } } } } return \@ret; } |