OXIESEC PANEL
- Current Dir:
/
/
snap
/
core
/
17200
/
usr
/
bin
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
06/06/2024 02:31:58 PM
rwxr-xr-x
📄
2to3-3.5
96 bytes
11/22/2023 03:35:24 PM
rwxr-xr-x
📄
[
50.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
aa-enabled
22.16 KB
06/29/2023 11:30:47 AM
rwxr-xr-x
📄
abootimg
18.27 KB
07/28/2011 06:29:01 AM
rwxr-xr-x
📄
abootimg-pack-initrd
362 bytes
07/28/2011 06:29:00 AM
rwxr-xr-x
📄
abootimg-unpack-initrd
272 bytes
07/28/2011 06:29:00 AM
rwxr-xr-x
📄
addpart
18.45 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
arch
30.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
awk
642.72 KB
09/11/2023 06:21:20 PM
rwxr-xr-x
📄
base32
38.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
base64
38.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
basename
30.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
bashbug
6.79 KB
04/19/2022 01:41:38 PM
rwxr-xr-x
📄
bootctl
74.44 KB
03/03/2023 04:27:52 AM
rwxr-xr-x
📄
busctl
363.21 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
c_rehash
6.05 KB
02/07/2024 03:55:01 PM
rwxr-xr-x
📄
captoinfo
70.71 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
catchsegv
3.26 KB
11/28/2023 02:44:45 PM
rwxr-xr-x
📄
cautious-launcher
853 bytes
10/30/2015 03:39:30 PM
rwxr-xr-x
📄
cgm
17.99 KB
01/18/2016 06:55:49 PM
rwxr-xr-x
📄
chacl
13.99 KB
04/21/2017 08:44:54 PM
rwxr-xr-x
📄
chage
60.88 KB
02/07/2024 10:59:49 AM
rwxr-xr-x
📄
chardet3
309 bytes
02/10/2016 05:12:09 PM
rwxr-xr-x
📄
chardetect3
309 bytes
02/10/2016 05:12:09 PM
rwxr-xr-x
📄
chattr
10.34 KB
06/03/2022 08:47:31 PM
rwxr-xr-x
📄
chcon
62.92 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
chfn
70.14 KB
02/07/2024 10:59:49 AM
rwxr-xr-x
📄
chrt
26.67 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
chsh
39.48 KB
02/07/2024 10:59:49 AM
rwxr-xr-x
📄
ckbcomp
144.19 KB
04/10/2019 09:25:58 PM
rwxr-xr-x
📄
cksum
30.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
clear
6.08 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
clear_console
10.27 KB
04/19/2022 01:41:45 PM
rwxr-xr-x
📄
cloud-id
310 bytes
04/25/2023 09:28:48 PM
rwxr-xr-x
📄
cloud-init
314 bytes
04/25/2023 09:28:48 PM
rwxr-xr-x
📄
cloud-init-per
2.06 KB
03/19/2021 02:37:22 PM
rwxr-xr-x
📄
cmp
42.67 KB
12/26/2015 11:11:28 PM
rwxr-xr-x
📄
codepage
10.29 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
comm
34.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
compose
17.55 KB
10/30/2015 03:39:30 PM
rwxr-xr-x
📄
console-conf
2.86 KB
01/25/2017 10:18:22 PM
rwxr-xr-x
📄
crontab
35.23 KB
05/10/2022 10:15:25 PM
rwxr-xr-x
📄
csplit
46.86 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
ctstat
18.68 KB
04/16/2019 12:37:11 PM
rwxr-xr-x
📄
cut
38.8 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
dbus-cleanup-sockets
9.98 KB
09/14/2023 10:58:48 AM
rwxr-xr-x
📄
dbus-daemon
218.95 KB
09/14/2023 10:58:48 AM
rwxr-xr-x
📄
dbus-monitor
21.99 KB
09/14/2023 10:58:48 AM
rwxr-xr-x
📄
dbus-run-session
9.98 KB
09/14/2023 10:58:48 AM
rwxr-xr-x
📄
dbus-send
21.98 KB
09/14/2023 10:58:48 AM
rwxr-xr-x
📄
dbus-update-activation-environment
13.98 KB
09/14/2023 10:58:48 AM
rwxr-xr-x
📄
dbus-uuidgen
9.98 KB
09/14/2023 10:58:48 AM
rwxr-xr-x
📄
deallocvt
10.3 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
deb-systemd-helper
17.99 KB
02/29/2016 12:24:38 PM
rwxr-xr-x
📄
deb-systemd-invoke
4.37 KB
02/29/2016 12:24:38 PM
rwxr-xr-x
📄
debconf
2.79 KB
05/08/2019 06:33:33 PM
rwxr-xr-x
📄
debconf-apt-progress
11.27 KB
05/08/2019 06:33:33 PM
rwxr-xr-x
📄
debconf-communicate
608 bytes
05/08/2019 06:33:33 PM
rwxr-xr-x
📄
debconf-copydb
1.68 KB
05/08/2019 06:33:33 PM
rwxr-xr-x
📄
debconf-escape
647 bytes
05/08/2019 06:33:33 PM
rwxr-xr-x
📄
debconf-set-selections
2.87 KB
05/08/2019 06:33:33 PM
rwxr-xr-x
📄
debconf-show
1.78 KB
05/08/2019 06:33:33 PM
rwxr-xr-x
📄
delpart
18.45 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
dh_bash-completion
2.49 KB
08/18/2015 07:47:29 PM
rwxr-xr-x
📄
dh_pypy
11.71 KB
08/16/2019 12:59:18 AM
rwxr-xr-x
📄
dh_python3
11.91 KB
08/16/2019 12:59:18 AM
rwxr-xr-x
📄
diff
123.08 KB
12/26/2015 11:11:28 PM
rwxr-xr-x
📄
diff3
54.86 KB
12/26/2015 11:11:28 PM
rwxr-xr-x
📄
dircolors
38.71 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
dirname
30.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
dotlockfile
14.51 KB
12/07/2013 03:08:22 AM
rwxr-xr-x
📄
dpkg-deb
131.43 KB
05/27/2022 10:37:03 AM
rwxr-xr-x
📄
du
119.17 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
dumpimage
139.06 KB
06/12/2019 09:45:58 AM
rwxr-xr-x
📄
dumpkeys
166.52 KB
01/22/2018 01:49:48 PM
rwxr-xr-x
📄
ec2metadata
7.12 KB
09/29/2020 06:17:10 PM
rwxr-xr-x
📄
edit
17.55 KB
10/30/2015 03:39:30 PM
rwxr-xr-x
📄
editor
1.02 MB
12/13/2023 06:53:21 PM
rwxr-xr-x
📄
env
30.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
envsubst
34.51 KB
11/07/2018 06:33:51 PM
rwxr-xr-x
📄
ex
1.02 MB
12/13/2023 06:53:21 PM
rwxr-xr-x
📄
expand
30.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
expiry
22.23 KB
02/07/2024 10:59:49 AM
rwxr-xr-x
📄
expr
38.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
factor
70.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
faillog
18.25 KB
02/07/2024 10:59:50 AM
rwxr-xr-x
📄
fallocate
22.56 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
finalrd
2.1 KB
09/17/2020 05:03:45 PM
rwxr-xr-x
📄
find
216.57 KB
02/07/2016 11:18:24 PM
rwxr-xr-x
📄
flock
26.71 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
fmt
38.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
fold
34.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
free
18.37 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
fw_printenv
36.29 KB
06/12/2019 09:45:58 AM
rwxr-xr-x
📄
fw_setenv
36.29 KB
06/12/2019 09:45:58 AM
rwxr-xr-x
📄
fwupdate
13.99 KB
01/18/2018 08:25:49 AM
rwxr-xr-x
📄
gawk
642.72 KB
09/11/2023 06:21:20 PM
rwxr-xr-x
📄
gdbserver
408.53 KB
06/09/2017 07:39:08 PM
rwxr-xr-x
📄
getconf
22.41 KB
11/28/2023 02:47:37 PM
rwxr-xr-x
📄
getent
27.3 KB
11/28/2023 02:47:37 PM
rwxr-xr-x
📄
getfacl
22.62 KB
04/21/2017 08:44:54 PM
rwxr-xr-x
📄
getkeycodes
10.3 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
getopt
14.43 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
gettext
34.48 KB
11/07/2018 06:33:51 PM
rwxr-xr-x
📄
gettext.sh
4.52 KB
11/07/2018 06:33:51 PM
rwxr-xr-x
📄
gpasswd
73.54 KB
02/07/2024 10:59:49 AM
rwxr-xr-x
📄
gpg
984.87 KB
07/12/2022 12:13:08 AM
rwxr-xr-x
📄
gpg-zip
3.23 KB
07/12/2022 12:13:07 AM
rwxr-xr-x
📄
gpgsplit
58.76 KB
07/12/2022 12:13:08 AM
rwxr-xr-x
📄
gpgv
363.63 KB
07/12/2022 12:13:08 AM
rwxr-xr-x
📄
groups
30.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
growpart
20.99 KB
09/29/2020 06:17:10 PM
rwxr-xr-x
📄
grub-editenv
228.78 KB
04/30/2021 04:02:29 PM
rwxr-xr-x
📄
head
38.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
helpztags
2.46 KB
04/08/2016 11:39:52 AM
rwxr-xr-x
📄
hostid
26.64 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
hostnamectl
287.2 KB
03/03/2023 04:27:52 AM
rwxr-xr-x
📄
i386
14.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
iconv
59 KB
11/28/2023 02:47:37 PM
rwxr-xr-x
📄
id
38.83 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
igawk
3.11 KB
09/11/2023 06:21:18 PM
rwxr-xr-x
📄
infocmp
54.57 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
infotocap
70.71 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
install
135.59 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
ionice
22.59 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
ipcmk
22.69 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
ipcrm
26.54 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
ipcs
46.71 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
iptables-xml
92.74 KB
05/09/2023 06:42:18 PM
rwxr-xr-x
📄
ischroot
10.34 KB
01/26/2016 06:17:55 PM
rwxr-xr-x
📄
join
46.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
jsondiff
976 bytes
11/27/2015 02:19:18 PM
rwxr-xr-x
📄
jsonpatch
3.58 KB
11/27/2015 02:19:18 PM
rwxr-xr-x
📄
jsonpointer
1.31 KB
10/24/2015 05:34:42 AM
rwxr-xr-x
📄
jwt3
288 bytes
08/29/2017 06:41:38 PM
rwxr-xr-x
📄
kbdinfo
10.31 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
kwboot
14.33 KB
06/12/2019 09:45:58 AM
rwxr-xr-x
📄
last
38.84 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
lastb
38.84 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
lastlog
14.03 KB
02/07/2024 10:59:50 AM
rwxr-xr-x
📄
lcf
7.6 KB
03/16/2016 08:58:51 PM
rwxr-xr-x
📄
ldd
5.3 KB
11/28/2023 02:44:50 PM
rwxr-xr-x
📄
less
166.76 KB
12/01/2017 04:11:09 AM
rwxr-xr-x
📄
lessecho
10.02 KB
12/01/2017 04:11:09 AM
rwxr-xr-x
📄
lessfile
8.36 KB
12/01/2017 04:11:09 AM
rwxr-xr-x
📄
lesskey
19.39 KB
12/01/2017 04:11:09 AM
rwxr-xr-x
📄
lesspipe
8.36 KB
12/01/2017 04:11:09 AM
rwxr-xr-x
📄
line
10.32 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
link
26.64 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
linux-check-removal
3.99 KB
03/18/2020 11:32:20 AM
rwxr-xr-x
📄
linux-update-symlinks
6.17 KB
03/18/2020 11:32:20 AM
rwxr-xr-x
📄
linux-version
2.63 KB
03/18/2020 11:32:20 AM
rwxr-xr-x
📄
linux32
14.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
linux64
14.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
lnstat
18.68 KB
04/16/2019 12:37:11 PM
rwxr-xr-x
📄
loadkeys
206.57 KB
01/22/2018 01:49:48 PM
rwxr-xr-x
📄
loadunimap
26.66 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
locale
37.91 KB
11/28/2023 02:47:37 PM
rwxr-xr-x
📄
localectl
295.22 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
localedef
315.71 KB
11/28/2023 02:47:37 PM
rwxr-xr-x
📄
lockfile-check
14.25 KB
12/03/2012 11:37:50 PM
rwxr-xr-x
📄
lockfile-create
14.25 KB
12/03/2012 11:37:50 PM
rwxr-xr-x
📄
lockfile-remove
14.25 KB
12/03/2012 11:37:50 PM
rwxr-xr-x
📄
lockfile-touch
14.25 KB
12/03/2012 11:37:50 PM
rwxr-xr-x
📄
logger
35.35 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
logname
26.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
lsattr
10.33 KB
06/03/2022 08:47:31 PM
rwxr-xr-x
📄
lscpu
55.12 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
lsinitramfs
2.43 KB
10/07/2019 10:53:35 AM
rwxr-xr-x
📄
lsipc
59 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
lslocks
31.09 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
lslogins
51.15 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
lspgpot
1.06 KB
06/25/2014 04:17:29 PM
rwxr-xr-x
📄
lzcat
67.11 KB
04/11/2022 07:08:39 PM
rwxr-xr-x
📄
lzcmp
5.39 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
lzdiff
5.39 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
lzegrep
5.56 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
lzfgrep
5.56 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
lzgrep
5.56 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
lzless
1.78 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
lzma
67.11 KB
04/11/2022 07:08:39 PM
rwxr-xr-x
📄
lzmainfo
10.31 KB
04/11/2022 07:08:39 PM
rwxr-xr-x
📄
lzmore
2.12 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
mail-lock
14.25 KB
12/03/2012 11:37:50 PM
rwxr-xr-x
📄
mail-touchlock
14.25 KB
12/03/2012 11:37:50 PM
rwxr-xr-x
📄
mail-unlock
14.25 KB
12/03/2012 11:37:50 PM
rwxr-xr-x
📄
mapscrn
18.66 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
mawk
115.01 KB
03/24/2014 09:53:33 AM
rwxr-xr-x
📄
mcookie
26.71 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
md5sum
42.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
md5sum.textutils
42.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
mesg
10.37 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
mk_modmap
15.78 KB
09/22/2016 05:33:20 PM
rwxr-xr-x
📄
mkenvimage
14.2 KB
06/12/2019 09:45:58 AM
rwxr-xr-x
📄
mkfifo
58.95 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
mkimage
143.06 KB
06/12/2019 09:45:58 AM
rwxr-xr-x
📄
mkknlimg
5.87 KB
06/12/2019 09:45:47 AM
rwxr-xr-x
📄
mksquashfs
174.12 KB
09/15/2021 01:04:44 PM
rwxr-xr-x
📄
mksunxiboot
6.12 KB
06/12/2019 09:45:58 AM
rwxr-xr-x
📄
mkswapfile
865 bytes
02/18/2024 07:48:44 PM
rwxr-xr-x
📄
namei
26.58 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
nawk
642.72 KB
09/11/2023 06:21:20 PM
rwxr-xr-x
📄
newgrp
38.97 KB
02/07/2024 10:59:50 AM
rwxr-xr-x
📄
ngettext
34.5 KB
11/07/2018 06:33:51 PM
rwxr-xr-x
📄
nice
34.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
nl
38.83 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
nohup
30.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
nproc
30.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
nsenter
26.88 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
nstat
22.47 KB
04/16/2019 12:37:11 PM
rwxr-xr-x
📄
numfmt
58.86 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
od
66.83 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
openssl
545.97 KB
02/07/2024 03:55:10 PM
rwxr-xr-x
📄
pager
166.73 KB
04/05/2017 01:09:34 PM
rwxr-xr-x
📄
partx
75.63 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
passwd
52.98 KB
02/07/2024 10:59:49 AM
rwxr-xr-x
📄
paste
30.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
pathchk
30.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
pdb3
59.56 KB
11/22/2023 03:35:24 PM
rwxr-xr-x
📄
pdb3.5
59.56 KB
11/22/2023 03:35:24 PM
rwxr-xr-x
📄
perl
1.82 MB
05/23/2023 05:16:56 PM
rwxr-xr-x
📄
perl5.22.1
1.82 MB
05/23/2023 05:16:56 PM
rwxr-xr-x
📄
pg
38.91 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
pgrep
26.63 KB
11/01/2023 07:23:47 AM
rwxr-xr-x
📄
pinky
34.86 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
pkill
26.63 KB
11/01/2023 07:23:47 AM
rwxr-xr-x
📄
pldd
14.59 KB
11/28/2023 02:47:37 PM
rwxr-xr-x
📄
plog
146 bytes
01/27/2016 04:19:52 PM
rwxr-xr-x
📄
pmap
30.61 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
poff
2.77 KB
01/27/2016 04:19:52 PM
rwxr-xr-x
📄
pon
1.33 KB
01/27/2016 04:19:52 PM
rwxr-xr-x
📄
pr
74.95 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
print
17.55 KB
10/30/2015 03:39:30 PM
rwxr-xr-x
📄
printenv
30.64 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
printf
46.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
prlimit
31.3 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
probert
2.09 KB
02/17/2017 02:26:29 AM
rwxr-xr-x
📄
psfaddtable
18.42 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
psfgettable
18.42 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
psfstriptable
18.42 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
psfxtable
18.42 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
ptx
66.95 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
pwdx
10.36 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
py3clean
7.62 KB
03/23/2016 11:00:30 AM
rwxr-xr-x
📄
py3compile
11.83 KB
03/23/2016 11:00:30 AM
rwxr-xr-x
📄
py3versions
11.44 KB
03/23/2016 11:00:39 AM
rwxr-xr-x
📄
pybuild
21.33 KB
08/16/2019 12:59:18 AM
rwxr-xr-x
📄
pydoc3
79 bytes
11/22/2023 03:35:24 PM
rwxr-xr-x
📄
pydoc3.5
79 bytes
11/22/2023 03:35:24 PM
rwxr-xr-x
📄
pygettext3
21.73 KB
11/22/2023 03:35:24 PM
rwxr-xr-x
📄
pygettext3.5
21.73 KB
11/22/2023 03:35:24 PM
rwxr-xr-x
📄
python3
4.25 MB
11/22/2023 03:37:00 PM
rwxr-xr-x
📄
python3-jsondiff
976 bytes
11/27/2015 02:19:18 PM
rwxr-xr-x
📄
python3-jsonpatch
3.58 KB
11/27/2015 02:19:18 PM
rwxr-xr-x
📄
python3-jsonpointer
1.31 KB
10/24/2015 05:34:42 AM
rwxr-xr-x
📄
python3.5
4.25 MB
11/22/2023 03:37:00 PM
rwxr-xr-x
📄
python3.5m
4.25 MB
11/22/2023 03:37:00 PM
rwxr-xr-x
📄
python3m
4.25 MB
11/22/2023 03:37:00 PM
rwxr-xr-x
📄
rcp
86.14 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
realpath
58.83 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
rename.ul
14.41 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
renice
10.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
reset
18.42 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
resizecons
18.6 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
resizepart
34.86 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
rev
10.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
rgrep
30 bytes
03/04/2016 05:02:24 PM
rwxr-xr-x
📄
rlogin
690.67 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
routef
173 bytes
11/04/2015 12:34:46 AM
rwxr-xr-x
📄
routel
1.23 KB
11/04/2015 12:34:46 AM
rwxr-xr-x
📄
rsh
690.67 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
rtstat
18.68 KB
04/16/2019 12:37:11 PM
rwxr-xr-x
📄
run-mailcap
17.55 KB
10/30/2015 03:39:30 PM
rwxr-xr-x
📄
runcon
34.8 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
rview
1.02 MB
12/13/2023 06:53:21 PM
rwxr-xr-x
📄
savelog
10.22 KB
01/26/2016 06:17:55 PM
rwxr-xr-x
📄
sc-logresolve
816 bytes
11/19/2015 03:43:04 PM
rwxr-xr-x
📄
scmp_sys_resolver
10.26 KB
04/29/2022 02:07:05 PM
rwxr-xr-x
📄
scp
86.14 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
screendump
10.33 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
script
22.66 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
scriptreplay
14.4 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
sdiff
46.78 KB
12/26/2015 11:11:28 PM
rwxr-xr-x
📄
see
17.55 KB
10/30/2015 03:39:30 PM
rwxr-xr-x
📄
select-editor
1.19 KB
02/21/2018 07:37:33 PM
rwxr-xr-x
📄
sensible-browser
1.11 KB
02/21/2018 07:37:33 PM
rwxr-xr-x
📄
sensible-editor
1.08 KB
02/21/2018 07:37:33 PM
rwxr-xr-x
📄
sensible-pager
288 bytes
02/21/2018 07:37:33 PM
rwxr-xr-x
📄
seq
46.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
setarch
14.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
setfacl
34.68 KB
04/21/2017 08:44:54 PM
rwxr-xr-x
📄
setkeycodes
10.29 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
setleds
10.32 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
setlogcons
10.27 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
setmetamode
10.37 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
setsid
10.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
setterm
34.61 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
sftp
134.36 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
sg
38.97 KB
02/07/2024 10:59:50 AM
rwxr-xr-x
📄
sha1sum
42.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
sha224sum
50.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
sha256sum
50.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
sha384sum
54.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
sha512sum
54.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
showconsolefont
18.4 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
showkey
14.34 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
shred
54.92 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
shuf
54.83 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
skill
22.61 KB
11/01/2023 07:23:47 AM
rwxr-xr-x
📄
slabtop
18.47 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
slogin
690.67 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
snap
15.85 MB
06/06/2024 02:32:02 PM
rwxr-xr-x
📄
snapctl
6.13 MB
06/06/2024 02:32:03 PM
rwxr-xr-x
📄
snapfuse
38.61 KB
06/06/2024 02:32:02 PM
rwxr-xr-x
📄
snice
22.61 KB
11/01/2023 07:23:47 AM
rwxr-xr-x
📄
sort
107.46 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
split
67.41 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
splitfont
10.27 KB
09/22/2016 05:33:23 PM
rwxr-xr-x
📄
ssh
690.67 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
ssh-add
330.21 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
ssh-agent
350.22 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
ssh-argv0
1.42 KB
05/13/2020 02:12:28 PM
rwxr-xr-x
📄
ssh-copy-id
10.12 KB
03/09/2016 06:04:48 PM
rwxr-xr-x
📄
ssh-keygen
390.23 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
ssh-keyscan
406.23 KB
01/09/2024 03:07:56 PM
rwxr-xr-x
📄
stat
79.05 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
stdbuf
62.83 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
sudo
133.6 KB
05/24/2023 01:48:57 PM
rwxr-xr-x
📄
sudoedit
133.6 KB
05/24/2023 01:48:57 PM
rwxr-xr-x
📄
sudoreplay
46.56 KB
05/24/2023 01:48:57 PM
rwxr-xr-x
📄
sum
38.74 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
systemd-analyze
1.43 MB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-cat
34.43 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-cgls
291.22 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-cgtop
303.3 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-delta
62.59 KB
03/03/2023 04:27:52 AM
rwxr-xr-x
📄
systemd-detect-virt
34.42 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-path
42.42 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-resolve
327.21 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-run
367.52 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
systemd-stdio-bridge
343.2 KB
03/03/2023 04:27:52 AM
rwxr-xr-x
📄
tabs
14.23 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
tac
34.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
tail
62.92 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
taskset
30.68 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
tee
34.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
test
46.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
tic
70.71 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
timedatectl
813 bytes
02/18/2024 07:56:51 PM
rwxr-xr-x
📄
timedatectl.real
295.22 KB
03/03/2023 04:27:51 AM
rwxr-xr-x
📄
timeout
55.38 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
tload
14.44 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
toe
14.34 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
top
106.51 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
touch
86.21 KB
01/18/2018 09:43:49 AM
rwxr-xr-x
📄
tput
14.3 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
tr
46.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
truncate
50.8 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
tset
18.42 KB
10/24/2023 01:56:19 PM
rwxr-xr-x
📄
tsort
34.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
tty
26.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
tzselect
14.86 KB
11/28/2023 02:44:40 PM
rwxr-xr-x
📄
ubuntu-core-launcher
124.53 KB
06/06/2024 02:32:03 PM
rwxr-xr-x
📄
ucf
39.68 KB
03/16/2016 08:58:51 PM
rwxr-xr-x
📄
ucfq
18.91 KB
03/16/2016 08:58:51 PM
rwxr-xr-x
📄
ucfr
10.47 KB
03/16/2016 08:58:51 PM
rwxr-xr-x
📄
unexpand
30.73 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
unicode_stop
530 bytes
09/22/2016 05:33:20 PM
rwxr-xr-x
📄
uniq
42.77 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
unlink
26.64 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
unlzma
67.11 KB
04/11/2022 07:08:39 PM
rwxr-xr-x
📄
unshare
18.72 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
unsquashfs
92.65 KB
09/15/2021 01:04:44 PM
rwxr-xr-x
📄
unxz
67.11 KB
04/11/2022 07:08:39 PM
rwxr-xr-x
📄
update-alternatives
46.61 KB
05/27/2022 10:37:03 AM
rwxr-xr-x
📄
uptime
10.33 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
users
30.7 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
utmpdump
14.52 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
vcs-run
6.75 KB
09/29/2020 06:17:10 PM
rwxr-xr-x
📄
vi
1.02 MB
12/13/2023 06:53:21 PM
rwxr-xr-x
📄
view
1.02 MB
12/13/2023 06:53:21 PM
rwxr-xr-x
📄
vim.tiny
1.02 MB
12/13/2023 06:53:21 PM
rwxr-xr-x
📄
vmstat
30.48 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
w
18.48 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
w.procps
18.48 KB
11/01/2023 07:23:48 AM
rwxr-xr-x
📄
wall
26.73 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
watch
23.14 KB
11/01/2023 07:23:47 AM
rwxr-xr-x
📄
wc
42.8 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
whereis
23.09 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
which
946 bytes
12/30/2017 06:15:02 PM
rwxr-xr-x
📄
who
46.86 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
whoami
26.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
wpa_passphrase
58 KB
03/01/2021 03:18:21 PM
rwxr-xr-x
📄
x86_64
14.38 KB
06/14/2022 09:28:54 PM
rwxr-xr-x
📄
xargs
66.21 KB
02/07/2016 11:18:24 PM
rwxr-xr-x
📄
xdelta3
150.84 KB
02/17/2016 02:02:30 PM
rwxr-xr-x
📄
xdg-open
38 bytes
02/18/2024 07:57:09 PM
rwxr-xr-x
📄
xdg-settings
886 bytes
02/18/2024 07:57:09 PM
rwxr-xr-x
📄
xxd
18.12 KB
12/13/2023 06:59:07 PM
rwxr-xr-x
📄
xz
67.11 KB
04/11/2022 07:08:39 PM
rwxr-xr-x
📄
xzcat
67.11 KB
04/11/2022 07:08:39 PM
rwxr-xr-x
📄
xzcmp
5.39 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
xzdiff
5.39 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
xzegrep
5.56 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
xzfgrep
5.56 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
xzgrep
5.56 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
xzless
1.78 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
xzmore
2.12 KB
04/11/2022 07:08:35 PM
rwxr-xr-x
📄
yes
30.67 KB
03/02/2017 06:07:22 PM
rwxr-xr-x
📄
zdump
14.42 KB
11/28/2023 02:47:37 PM
rwxr-xr-x
Editing: growpart
Close
#!/bin/sh # Copyright (C) 2011 Canonical Ltd. # Copyright (C) 2013 Hewlett-Packard Development Company, L.P. # # Authors: Scott Moser <smoser@canonical.com> # Juerg Haefliger <juerg.haefliger@hp.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # the fudge factor. if within this many bytes dont bother FUDGE=${GROWPART_FUDGE:-$((1024*1024))} TEMP_D="" RESTORE_FUNC="" RESTORE_HUMAN="" VERBOSITY=0 DISK="" PART="" PT_UPDATE=false DRY_RUN=0 SFDISK_VERSION="" SFDISK_2_26="22600" SFDISK_V_WORKING_GPT="22603" MBR_BACKUP="" GPT_BACKUP="" _capture="" error() { echo "$@" 1>&2 } fail() { [ $# -eq 0 ] || echo "FAILED:" "$@" exit 2 } nochange() { echo "NOCHANGE:" "$@" exit 1 } changed() { echo "CHANGED:" "$@" exit 0 } change() { echo "CHANGE:" "$@" exit 0 } cleanup() { if [ -n "${RESTORE_FUNC}" ]; then error "***** WARNING: Resize failed, attempting to revert ******" if ${RESTORE_FUNC} ; then error "***** Appears to have gone OK ****" else error "***** FAILED! ******" if [ -n "${RESTORE_HUMAN}" -a -f "${RESTORE_HUMAN}" ]; then error "**** original table looked like: ****" cat "${RESTORE_HUMAN}" 1>&2 else error "We seem to have not saved the partition table!" fi fi fi [ -z "${TEMP_D}" -o ! -d "${TEMP_D}" ] || rm -Rf "${TEMP_D}" } debug() { local level=${1} shift [ "${level}" -gt "${VERBOSITY}" ] && return if [ "${DEBUG_LOG}" ]; then echo "$@" >>"${DEBUG_LOG}" else error "$@" fi } debugcat() { local level="$1" shift; [ "${level}" -gt "$VERBOSITY" ] && return if [ "${DEBUG_LOG}" ]; then cat "$@" >>"${DEBUG_LOG}" else cat "$@" 1>&2 fi } mktemp_d() { # just a mktemp -d that doens't need mktemp if its not there. _RET=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX" 2>/dev/null) && return _RET=$(umask 077 && t="${TMPDIR:-/tmp}/${0##*/}.$$" && mkdir "${t}" && echo "${t}") return } Usage() { cat <<EOF ${0##*/} disk partition rewrite partition table so that partition takes up all the space it can options: -h | --help print Usage and exit --fudge F if part could be resized, but change would be less than 'F' bytes, do not resize (default: ${FUDGE}) -N | --dry-run only report what would be done, show new 'sfdisk -d' -v | --verbose increase verbosity / debug -u | --update R update the the kernel partition table info after growing this requires kernel support and 'partx --update' R is one of: - 'auto' : [default] update partition if possible - 'force' : try despite sanity checks (fail on failure) - 'off' : do not attempt - 'on' : fail if sanity checks indicate no support Example: - ${0##*/} /dev/sda 1 Resize partition 1 on /dev/sda EOF } bad_Usage() { Usage 1>&2 error "$@" exit 2 } sfdisk_restore_legacy() { sfdisk --no-reread "${DISK}" -I "${MBR_BACKUP}" } sfdisk_restore() { # files are named: sfdisk-<device>-<offset>.bak local f="" offset="" fails=0 for f in "${MBR_BACKUP}"*.bak; do [ -f "$f" ] || continue offset=${f##*-} offset=${offset%.bak} [ "$offset" = "$f" ] && { error "WARN: confused by file $f"; continue; } dd "if=$f" "of=${DISK}" seek=$(($offset)) bs=1 conv=notrunc || { error "WARN: failed restore from $f"; fails=$(($fails+1)); } done return $fails } sfdisk_worked_but_blkrrpart_failed() { local ret="$1" output="$2" # exit code found was just 1, but dont insist on that #[ $ret -eq 1 ] || return 1 # Successfully wrote the new partition table grep -qi "Success.* wrote.* new.* partition" "$output" && grep -qi "BLKRRPART: Device or resource busy" "$output" return } get_sfdisk_version() { # set SFDISK_VERSION to MAJOR*10000+MINOR*100+MICRO local out oifs="$IFS" ver="" [ -n "$SFDISK_VERSION" ] && return 0 # expected output: sfdisk from util-linux 2.25.2 out=$(sfdisk --version) || { error "failed to get sfdisk version"; return 1; } set -- $out ver=$4 case "$ver" in [0-9]*.[0-9]*.[0-9]|[0-9].[0-9]*) IFS="."; set -- $ver; IFS="$oifs" SFDISK_VERSION=$(($1*10000+$2*100+${3:-0})) return 0;; *) error "unexpected output in sfdisk --version [$out]" return 1;; esac } resize_sfdisk() { local humanpt="${TEMP_D}/recovery" local mbr_backup="${TEMP_D}/orig.save" local restore_func="" local format="$1" local change_out=${TEMP_D}/change.out local dump_out=${TEMP_D}/dump.out local new_out=${TEMP_D}/new.out local dump_mod=${TEMP_D}/dump.mod local tmp="${TEMP_D}/tmp.out" local err="${TEMP_D}/err.out" local mbr_max_512="4294967296" local pt_start pt_size pt_end max_end new_size change_info dpart local sector_num sector_size disk_size tot out rqe sfd_list sfdisk --list --unit=S "$DISK" >"$tmp" || fail "failed: sfdisk --list $DISK" if [ "${SFDISK_VERSION}" -lt ${SFDISK_2_26} ]; then # exected output contains: Units: sectors of 512 bytes, ... out=$(awk '$1 == "Units:" && $5 ~ /bytes/ { print $4 }' "$tmp") || fail "failed to read sfdisk output" if [ -z "$out" ]; then error "WARN: sector size not found in sfdisk output, assuming 512" sector_size=512 else sector_size="$out" fi local _w _cyl _w1 _heads _w2 sectors _w3 t s # show-size is in units of 1024 bytes (same as /proc/partitions) t=$(sfdisk --show-size "${DISK}") || fail "failed: sfdisk --show-size $DISK" disk_size=$((t*1024)) sector_num=$(($disk_size/$sector_size)) msg="disk size '$disk_size' not evenly div by sector size '$sector_size'" [ "$((${disk_size}%${sector_size}))" -eq 0 ] || error "WARN: $msg" restore_func=sfdisk_restore_legacy else # --list first line output: # Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors local _x read _x _x _x _x disk_size _x sector_num _x < "$tmp" sector_size=$((disk_size/$sector_num)) restore_func=sfdisk_restore fi debug 1 "$sector_num sectors of $sector_size. total size=${disk_size} bytes" rqe sfd_dump sfdisk --unit=S --dump "${DISK}" >"${dump_out}" || fail "failed to dump sfdisk info for ${DISK}" RESTORE_HUMAN="$dump_out" { echo "## sfdisk --unit=S --dump ${DISK}" cat "${dump_out}" } >"$humanpt" [ $? -eq 0 ] || fail "failed to save sfdisk -d output" RESTORE_HUMAN="$humanpt" debugcat 1 "$humanpt" sed -e 's/,//g; s/start=/start /; s/size=/size /' "${dump_out}" \ >"${dump_mod}" || fail "sed failed on dump output" dpart="${DISK}${PART}" # disk and partition number if [ -b "${DISK}p${PART}" -a "${DISK%[0-9]}" != "${DISK}" ]; then # for block devices that end in a number (/dev/nbd0) # the partition is "<name>p<partition_number>" (/dev/nbd0p1) dpart="${DISK}p${PART}" elif [ "${DISK#/dev/loop[0-9]}" != "${DISK}" ]; then # for /dev/loop devices, sfdisk output will be <name>p<number> # format also, even though there is not a device there. dpart="${DISK}p${PART}" fi pt_start=$(awk '$1 == pt { print $4 }' "pt=${dpart}" <"${dump_mod}") && pt_size=$(awk '$1 == pt { print $6 }' "pt=${dpart}" <"${dump_mod}") && [ -n "${pt_start}" -a -n "${pt_size}" ] && pt_end=$((${pt_size}+${pt_start})) || fail "failed to get start and end for ${dpart} in ${DISK}" # find the minimal starting location that is >= pt_end max_end=$(awk '$3 == "start" { if($4 >= pt_end && $4 < min) { min = $4 } } END { printf("%s\n",min); }' \ min=${sector_num} pt_end=${pt_end} "${dump_mod}") && [ -n "${max_end}" ] || fail "failed to get max_end for partition ${PART}" if [ "$format" = "gpt" ]; then # sfdisk respects 'last-lba' in input, and complains about # partitions that go past that. without it, it does the right thing. sed -i '/^last-lba:/d' "$dump_out" || fail "failed to remove last-lba from output" fi if [ "$format" = "dos" ]; then mbr_max_sectors=$((mbr_max_512*$((sector_size/512)))) if [ "$max_end" -gt "$mbr_max_sectors" ]; then max_end=$mbr_max_sectors fi [ $(($disk_size/512)) -gt $mbr_max_512 ] && debug 0 "WARNING: MBR/dos partitioned disk is larger than 2TB." \ "Additional space will go unused." fi local gpt_second_size="33" if [ "${max_end}" -gt "$((${sector_num}-${gpt_second_size}))" ]; then # if mbr allow subsequent conversion to gpt without shrinking the # partition. safety net at cost of 33 sectors, seems reasonable. # if gpt, we can't write there anyway. debug 1 "padding ${gpt_second_size} sectors for gpt secondary header" max_end=$((${sector_num}-${gpt_second_size})) fi debug 1 "max_end=${max_end} tot=${sector_num} pt_end=${pt_end}" \ "pt_start=${pt_start} pt_size=${pt_size}" [ $((${pt_end})) -eq ${max_end} ] && nochange "partition ${PART} is size ${pt_size}. it cannot be grown" [ $((${pt_end}+(${FUDGE}/$sector_size))) -gt ${max_end} ] && nochange "partition ${PART} could only be grown by" \ "$((${max_end}-${pt_end})) [fudge=$((${FUDGE}/$sector_size))]" # now, change the size for this partition in ${dump_out} to be the # new size new_size=$((${max_end}-${pt_start})) sed "\|^\s*${dpart} |s/${pt_size},/${new_size},/" "${dump_out}" \ >"${new_out}" || fail "failed to change size in output" change_info="partition=${PART} start=${pt_start} old: size=${pt_size} end=${pt_end} new: size=${new_size},end=${max_end}" if [ ${DRY_RUN} -ne 0 ]; then echo "CHANGE: ${change_info}" { echo "# === old sfdisk -d ===" cat "${dump_out}" echo "# === new sfdisk -d ===" cat "${new_out}" } 1>&2 exit 0 fi MBR_BACKUP="${mbr_backup}" LANG=C sfdisk --no-reread "${DISK}" --force \ -O "${mbr_backup}" <"${new_out}" >"${change_out}" 2>&1 ret=$? [ $ret -eq 0 ] || RESTORE_FUNC="${restore_func}" if [ $ret -eq 0 ]; then : elif $PT_UPDATE && sfdisk_worked_but_blkrrpart_failed "$ret" "${change_out}"; then # if the command failed, but it looks like only because # the device was busy and we have pt_update, then go on debug 1 "sfdisk failed, but likely only because of blkrrpart" else error "attempt to resize ${DISK} failed. sfdisk output below:" sed 's,^,| ,' "${change_out}" 1>&2 fail "failed to resize" fi rq pt_update pt_update "$DISK" "$PART" || fail "pt_resize failed" RESTORE_FUNC="" changed "${change_info}" # dump_out looks something like: ## partition table of /tmp/out.img #unit: sectors # #/tmp/out.img1 : start= 1, size= 48194, Id=83 #/tmp/out.img2 : start= 48195, size= 963900, Id=83 #/tmp/out.img3 : start= 1012095, size= 305235, Id=82 #/tmp/out.img4 : start= 1317330, size= 771120, Id= 5 #/tmp/out.img5 : start= 1317331, size= 642599, Id=83 #/tmp/out.img6 : start= 1959931, size= 48194, Id=83 #/tmp/out.img7 : start= 2008126, size= 80324, Id=83 } gpt_restore() { sgdisk -l "${GPT_BACKUP}" "${DISK}" } resize_sgdisk() { GPT_BACKUP="${TEMP_D}/pt.backup" local pt_info="${TEMP_D}/pt.info" local pt_pretend="${TEMP_D}/pt.pretend" local pt_data="${TEMP_D}/pt.data" local out="${TEMP_D}/out" local dev="disk=${DISK} partition=${PART}" local pt_start pt_end pt_size last pt_max code guid name new_size local old new change_info sector_size # Dump the original partition information and details to disk. This is # used in case something goes wrong and human interaction is required # to revert any changes. rqe sgd_info sgdisk "--info=${PART}" --print "${DISK}" >"${pt_info}" || fail "${dev}: failed to dump original sgdisk info" RESTORE_HUMAN="${pt_info}" sector_size=$(awk '$0 ~ /^Logical sector size:.*bytes/ { print $4 }' \ "$pt_info") && [ -n "$sector_size" ] || { sector_size=512 error "WARN: did not find sector size, assuming 512" } debug 1 "$dev: original sgdisk info:" debugcat 1 "${pt_info}" # Pretend to move the backup GPT header to the end of the disk and dump # the resulting partition information. We use this info to determine if # we have to resize the partition. rqe sgd_pretend sgdisk --pretend --move-second-header \ --print "${DISK}" >"${pt_pretend}" || fail "${dev}: failed to dump pretend sgdisk info" debug 1 "$dev: pretend sgdisk info" debugcat 1 "${pt_pretend}" # Extract the partition data from the pretend dump awk 'found { print } ; $1 == "Number" { found = 1 }' \ "${pt_pretend}" >"${pt_data}" || fail "${dev}: failed to parse pretend sgdisk info" # Get the start and end sectors of the partition to be grown pt_start=$(awk '$1 == '"${PART}"' { print $2 }' "${pt_data}") && [ -n "${pt_start}" ] || fail "${dev}: failed to get start sector" pt_end=$(awk '$1 == '"${PART}"' { print $3 }' "${pt_data}") && [ -n "${pt_end}" ] || fail "${dev}: failed to get end sector" pt_size="$((${pt_end} - ${pt_start}))" # Get the last usable sector last=$(awk '/last usable sector is/ { print $NF }' \ "${pt_pretend}") && [ -n "${last}" ] || fail "${dev}: failed to get last usable sector" # Find the minimal start sector that is >= pt_end pt_max=$(awk '{ if ($2 >= pt_end && $2 < min) { min = $2 } } END \ { print min }' min="${last}" pt_end="${pt_end}" \ "${pt_data}") && [ -n "${pt_max}" ] || fail "${dev}: failed to find max end sector" debug 1 "${dev}: pt_start=${pt_start} pt_end=${pt_end}" \ "pt_size=${pt_size} pt_max=${pt_max} last=${last}" # Check if the partition can be grown [ "${pt_end}" -eq "${pt_max}" ] && nochange "${dev}: size=${pt_size}, it cannot be grown" [ "$((${pt_end} + ${FUDGE}/${sector_size}))" -gt "${pt_max}" ] && nochange "${dev}: could only be grown by" \ "$((${pt_max} - ${pt_end})) [fudge=$((${FUDGE}/$sector_size))]" # The partition can be grown if we made it here. Get some more info # about it so we can do it properly. # FIXME: Do we care about the attribute flags? code=$(awk '/^Partition GUID code:/ { print $4 }' "${pt_info}") guid=$(awk '/^Partition unique GUID:/ { print $4 }' "${pt_info}") name=$(awk '/^Partition name:/ { gsub(/'"'"'/, "") ; \ if (NF >= 3) print substr($0, index($0, $3)) }' "${pt_info}") [ -n "${code}" -a -n "${guid}" ] || fail "${dev}: failed to parse sgdisk details" debug 1 "${dev}: code=${code} guid=${guid} name='${name}'" local wouldrun="" [ "$DRY_RUN" -ne 0 ] && wouldrun="would-run" # Calculate the new size of the partition new_size=$((${pt_max} - ${pt_start})) old="old: size=${pt_size},end=${pt_end}" new="new: size=${new_size},end=${pt_max}" change_info="${dev}: start=${pt_start} ${old} ${new}" # Backup the current partition table, we're about to modify it rq sgd_backup $wouldrun sgdisk "--backup=${GPT_BACKUP}" "${DISK}" || fail "${dev}: failed to backup the partition table" # Modify the partition table. We do it all in one go (the order is # important!): # - move the GPT backup header to the end of the disk # - delete the partition # - recreate the partition with the new size # - set the partition code # - set the partition GUID # - set the partition name rq sgdisk_mod $wouldrun sgdisk --move-second-header "--delete=${PART}" \ "--new=${PART}:${pt_start}:${pt_max}" \ "--typecode=${PART}:${code}" \ "--partition-guid=${PART}:${guid}" \ "--change-name=${PART}:${name}" "${DISK}" && rq pt_update $wouldrun pt_update "$DISK" "$PART" || { RESTORE_FUNC=gpt_restore fail "${dev}: failed to repartition" } # Dry run [ "${DRY_RUN}" -ne 0 ] && change "${change_info}" changed "${change_info}" } kver_to_num() { local kver="$1" maj="" min="" mic="0" kver=${kver%%-*} maj=${kver%%.*} min=${kver#${maj}.} min=${min%%.*} mic=${kver#${maj}.${min}.} [ "$kver" = "$mic" ] && mic=0 _RET=$(($maj*1000*1000+$min*1000+$mic)) } kver_cmp() { local op="$2" n1="" n2="" kver_to_num "$1" n1="$_RET" kver_to_num "$3" n2="$_RET" [ $n1 $op $n2 ] } rq() { # runquieterror(label, command) # gobble stderr of a command unless it errors local label="$1" ret="" efile="" efile="$TEMP_D/$label.err" shift; local rlabel="running" [ "$1" = "would-run" ] && rlabel="would-run" && shift local cmd="" x="" for x in "$@"; do [ "${x#* }" != "$x" -o "${x#* \"}" != "$x" ] && x="'$x'" cmd="$cmd $x" done cmd=${cmd# } debug 2 "$rlabel[$label][$_capture]" "$cmd" [ "$rlabel" = "would-run" ] && return 0 if [ "${_capture}" = "erronly" ]; then "$@" 2>"$TEMP_D/$label.err" ret=$? else "$@" >"$TEMP_D/$label.err" 2>&1 ret=$? fi if [ $ret -ne 0 ]; then error "failed [$label:$ret]" "$@" cat "$efile" 1>&2 fi return $ret } rqe() { local _capture="erronly" rq "$@" } verify_ptupdate() { local input="$1" found="" reason="" kver="" # we can always satisfy 'off' if [ "$input" = "off" ]; then _RET="false"; return 0; fi if command -v partx >/dev/null 2>&1; then local out="" ret=0 out=$(partx --help 2>&1) ret=$? if [ $ret -eq 0 ]; then echo "$out" | grep -q -- --update || { reason="partx has no '--update' flag in usage." found="off" } else reason="'partx --help' returned $ret. assuming it is old." found="off" fi else reason="no 'partx' command" found="off" fi if [ -z "$found" ]; then if [ "$(uname)" != "Linux" ]; then reason="Kernel is not Linux per uname." found="off" fi fi if [ -z "$found" ]; then kver=$(uname -r) || debug 1 "uname -r failed!" if ! kver_cmp "${kver-0.0.0}" -ge 3.8.0; then reason="Kernel '$kver' < 3.8.0." found="off" fi fi if [ -z "$found" ]; then _RET="true" return 0 fi case "$input" in on) error "$reason"; return 1;; auto) _RET="false"; debug 1 "partition update disabled: $reason" return 0;; force) _RET="true" error "WARNING: ptupdate forced on even though: $reason" return 0;; esac error "unknown input '$input'"; return 1; } pt_update() { local dev="$1" part="$2" update="${3:-$PT_UPDATE}" if ! $update; then return 0 fi # partx only works on block devices (do not run on file) [ -b "$dev" ] || return 0 partx --update "$part" "$dev" } has_cmd() { command -v "${1}" >/dev/null 2>&1 } resize_sgdisk_gpt() { resize_sgdisk gpt } resize_sgdisk_dos() { fail "unable to resize dos label with sgdisk" } resize_sfdisk_gpt() { resize_sfdisk gpt } resize_sfdisk_dos() { resize_sfdisk dos } get_table_format() { local out="" disk="$1" if has_cmd blkid && out=$(blkid -o value -s PTTYPE "$disk") && [ "$out" = "dos" -o "$out" = "gpt" ]; then _RET="$out" return fi _RET="dos" if [ ${SFDISK_VERSION} -lt ${SFDISK_2_26} ] && out=$(sfdisk --id --force "$disk" 1 2>/dev/null); then if [ "$out" = "ee" ]; then _RET="gpt" else _RET="dos" fi return elif out=$(LANG=C sfdisk --list "$disk"); then out=$(echo "$out" | sed -e '/Disklabel type/!d' -e 's/.*: //') case "$out" in gpt|dos) _RET="$out";; *) error "WARN: unknown label $out";; esac fi } get_resizer() { local format="$1" user=${2:-"auto"} case "$user" in sgdisk) _RET="resize_sgdisk_$format"; return;; sfdisk) _RET="resize_sfdisk_$format"; return;; auto) :;; *) error "unexpected input: '$user'";; esac if [ "$format" = "dos" ]; then _RET="resize_sfdisk_dos" return 0 fi if [ "${SFDISK_VERSION}" -ge ${SFDISK_V_WORKING_GPT} ]; then # sfdisk 2.26.2 works for resize but loses type (LP: #1474090) _RET="resize_sfdisk_gpt" elif has_cmd sgdisk; then _RET="resize_sgdisk_$format" else error "no tools available to resize disk with '$format'" return 1 fi return 0 } pt_update="auto" resizer=${GROWPART_RESIZER:-"auto"} while [ $# -ne 0 ]; do cur=${1} next=${2} case "$cur" in -h|--help) Usage exit 0 ;; --fudge) FUDGE=${next} shift ;; -N|--dry-run) DRY_RUN=1 ;; -u|--update|--update=*) if [ "${cur#--update=}" != "$cur" ]; then next="${cur#--update=}" else shift fi case "$next" in off|auto|force|on) pt_update=$next;; *) fail "unknown --update option: $next";; esac ;; -v|--verbose) VERBOSITY=$(($VERBOSITY+1)) ;; --) shift break ;; -*) fail "unknown option ${cur}" ;; *) if [ -z "${DISK}" ]; then DISK=${cur} else [ -z "${PART}" ] || fail "confused by arg ${cur}" PART=${cur} fi ;; esac shift done [ -n "${DISK}" ] || bad_Usage "must supply disk and partition-number" [ -n "${PART}" ] || bad_Usage "must supply partition-number" has_cmd "sfdisk" || fail "sfdisk not found" get_sfdisk_version || fail [ -e "${DISK}" ] || fail "${DISK}: does not exist" [ "${PART#*[!0-9]}" = "${PART}" ] || fail "partition-number must be a number" verify_ptupdate "$pt_update" || fail PT_UPDATE=$_RET debug 1 "update-partition set to $PT_UPDATE" mktemp_d && TEMP_D="${_RET}" || fail "failed to make temp dir" trap cleanup 0 # EXIT - some shells may not like 'EXIT' but are ok with 0 # get the ID of the first partition to determine if it's MBR or GPT get_table_format "$DISK" || fail format=$_RET get_resizer "$format" "$resizer" || fail "failed to get a resizer for id '$id'" resizer=$_RET debug 1 "resizing $PART on $DISK using $resizer" "$resizer" # vi: ts=4 noexpandtab